15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2010-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 is the implementation of the API for GATT module of BTA.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE)
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatt_api.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gattc_int.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Constants
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachstatic const tBTA_SYS_REG bta_gattc_reg =
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_gattc_hdl_event,
42e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    BTA_GATTC_Disable
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Function         BTA_GATTC_Disable
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
50e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Description      This function is called to disable GATTC module
51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
52e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Parameters       None.
53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          None
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
57e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachvoid BTA_GATTC_Disable(void)
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
59e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    BT_HDR  *p_buf;
60e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
61e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if (bta_sys_is_register(BTA_ID_GATTC) == FALSE)
62e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
63e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        APPL_TRACE_WARNING0("GATTC Module not enabled/already disabled");
64e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        return;
65e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
66e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
67e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
68e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        p_buf->event = BTA_GATTC_API_DISABLE_EVT;
69e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        bta_sys_sendmsg(p_buf);
70e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
71e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    bta_sys_deregister(BTA_ID_GATTC);
72e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_AppRegister
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to register application callbacks
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    with BTA GATTC module.
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       p_app_uuid - applicaiton UUID
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_client_cb - pointer to the application callback function.
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb)
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_REG  *p_buf;
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
92e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if (bta_sys_is_register(BTA_ID_GATTC) == FALSE)
93e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
94e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        GKI_sched_lock();
95e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg);
96e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        GKI_sched_unlock();
97e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_REG *) GKI_getbuf(sizeof(tBTA_GATTC_API_REG))) != NULL)
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event    = BTA_GATTC_API_REG_EVT;
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_app_uuid != NULL)
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID));
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->p_cback      = p_client_cb;
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_AppDeregister
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to deregister an application
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from BTA GATTC module.
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface identifier.
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if)
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_DEREG  *p_buf;
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_DEREG *) GKI_getbuf(sizeof(tBTA_GATTC_API_DEREG))) != NULL)
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_DEREG_EVT;
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->client_if = client_if;
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_Open
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Open a direct connection or add a background auto connection
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if: server interface.
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, BOOLEAN is_direct)
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_OPEN  *p_buf;
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_OPEN *) GKI_getbuf(sizeof(tBTA_GATTC_API_OPEN))) != NULL)
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT;
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->client_if = client_if;
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_direct = is_direct;
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_CancelOpen
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancel a direct open connection or remove a background auto connection
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if: server interface.
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, BOOLEAN is_direct)
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_CANCEL_OPEN  *p_buf;
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_CANCEL_OPEN *) GKI_getbuf(sizeof(tBTA_GATTC_API_CANCEL_OPEN))) != NULL)
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT;
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->client_if = client_if;
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_direct = is_direct;
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_Close
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Close a connection to a GATT server.
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connectino ID to be closed.
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_Close(UINT16 conn_id)
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->event = BTA_GATTC_API_CLOSE_EVT;
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->layer_specific = conn_id;
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
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_ServiceSearchRequest
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to request a GATT service discovery
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    on a GATT server. This function report service search result
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  by a callback event, and followed by a service search complete
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  event.
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID.
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_srvc_uuid: a UUID of the service application is interested in.
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              If Null, discover for all services.
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ServiceSearchRequest (UINT16 conn_id, tBT_UUID *p_srvc_uuid)
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_SEARCH  *p_buf;
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(tBT_UUID);
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_SEARCH *) GKI_getbuf(len)) != NULL)
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT;
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_srvc_uuid)
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2556975b4d711142b885af479721cada448952c6b41Andre Eisenbach            p_buf->p_srvc_uuid = (tBT_UUID *)(p_buf + 1);
2566975b4d711142b885af479721cada448952c6b41Andre Eisenbach            memcpy(p_buf->p_srvc_uuid, p_srvc_uuid, sizeof(tBT_UUID));
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2586975b4d711142b885af479721cada448952c6b41Andre Eisenbach        else
2596975b4d711142b885af479721cada448952c6b41Andre Eisenbach            p_buf->p_srvc_uuid = NULL;
2606975b4d711142b885af479721cada448952c6b41Andre Eisenbach
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetFirstChar
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the first characteristic of the
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_srvc_id: the service ID of which the characteristic is belonged to.
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_uuid_cond: Characteristic UUID, if NULL find the first available
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_result: output parameter which will store the GATT
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic ID.
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_property: output parameter to carry the characteristic property.
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetFirstChar (UINT16 conn_id, tBTA_GATT_SRVC_ID *p_srvc_id,
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBT_UUID *p_char_uuid_cond,
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_GATTC_CHAR_ID *p_char_result,
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_GATT_CHAR_PROP *p_property)
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_srvc_id || !p_char_result)
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id, BTA_GATTC_ATTR_TYPE_CHAR, p_srvc_id, NULL,
2966975b4d711142b885af479721cada448952c6b41Andre Eisenbach                                        p_char_uuid_cond, &p_char_result->char_id, (void *)p_property))
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_char_result->srvc_id, p_srvc_id, sizeof(tBTA_GATT_SRVC_ID));
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetNextChar
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
309ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the next characteristic of the
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_start_char_id: start the characteristic search from the next record
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                           after the one identified by char_id.
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_uuid_cond: Characteristic UUID, if NULL find the first available
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_result: output parameter which will store the GATT
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic ID.
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_property: output parameter to carry the characteristic property.
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetNextChar (UINT16 conn_id,
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_GATTC_CHAR_ID *p_start_char_id,
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBT_UUID           *p_char_uuid_cond,
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_GATTC_CHAR_ID *p_char_result,
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_GATT_CHAR_PROP    *p_property)
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_start_char_id || !p_char_result)
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id, BTA_GATTC_ATTR_TYPE_CHAR,
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_char_id->srvc_id,
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_char_id->char_id,
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_char_uuid_cond,
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_char_result->char_id,
3406975b4d711142b885af479721cada448952c6b41Andre Eisenbach                                        (void *) p_property))
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_char_result->srvc_id, &p_start_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetFirstCharDescr
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the first characteristic descriptor of the
354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  characteristic on the given server.
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_id: the characteristic ID of which the descriptor is belonged to.
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_uuid_cond: Characteristic Descr UUID, if NULL find the first available
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_result: output parameter which will store the GATT
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic descriptor ID.
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetFirstCharDescr (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                tBT_UUID *p_descr_uuid_cond,
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                tBTA_GATTC_CHAR_DESCR_ID *p_descr_result)
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_char_id || !p_descr_result)
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_descr_result, 0, sizeof(tBTA_GATTC_CHAR_DESCR_ID));
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id,
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BTA_GATTC_ATTR_TYPE_CHAR_DESCR,
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_char_id->srvc_id,
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_char_id->char_id,
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_descr_uuid_cond,
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_descr_result->char_id.char_id,
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        NULL))
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3866975b4d711142b885af479721cada448952c6b41Andre Eisenbach        memcpy(&p_descr_result->descr_id, &p_descr_result->char_id.char_id, sizeof(tBTA_GATT_ID));
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_descr_result->char_id, p_char_id, sizeof(tBTA_GATTC_CHAR_ID));
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetNextCharDescr
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the next characteristic descriptor
398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  of the characterisctic.
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_start_descr_id: start the characteristic search from the next record
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                           after the one identified by p_start_descr_id.
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_uuid_cond: Characteristic descriptor UUID, if NULL find
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               the first available characteristic descriptor.
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_result: output parameter which will store the GATT
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic descriptor ID.
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetNextCharDescr (UINT16 conn_id,
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                             tBTA_GATTC_CHAR_DESCR_ID *p_start_descr_id,
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                             tBT_UUID           *p_descr_uuid_cond,
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                             tBTA_GATTC_CHAR_DESCR_ID *p_descr_result)
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_start_descr_id || !p_descr_result)
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_descr_result, 0, sizeof(tBTA_GATTC_CHAR_DESCR_ID));
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id, BTA_GATTC_ATTR_TYPE_CHAR_DESCR,
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_descr_id->char_id.srvc_id,
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_descr_id->char_id.char_id,
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_descr_uuid_cond,
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_descr_result->char_id.char_id,
4286975b4d711142b885af479721cada448952c6b41Andre Eisenbach                                        (void *)&p_start_descr_id->descr_id))
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4316975b4d711142b885af479721cada448952c6b41Andre Eisenbach        memcpy(&p_descr_result->descr_id, &p_descr_result->char_id.char_id, sizeof(tBTA_GATT_ID));
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_descr_result->char_id, p_start_descr_id, sizeof(tBTA_GATTC_CHAR_ID));
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetFirstIncludedService
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to find the first included service of the
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_srvc_id: the service ID of which the characteristic is belonged to.
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_uuid_cond: Characteristic UUID, if NULL find the first available
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_result: output parameter which will store the GATT ID
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              of the included service found.
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetFirstIncludedService(UINT16 conn_id, tBTA_GATT_SRVC_ID *p_srvc_id,
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    tBT_UUID *p_uuid_cond, tBTA_GATTC_INCL_SVC_ID *p_result)
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_srvc_id || !p_result)
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id,
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BTA_GATTC_ATTR_TYPE_INCL_SRVC,
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_srvc_id,
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        NULL,
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_uuid_cond,
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_result->incl_svc_id.id,
4706975b4d711142b885af479721cada448952c6b41Andre Eisenbach                                        (void *)&p_result->incl_svc_id.is_primary))
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_result->srvc_id, p_srvc_id, sizeof(tBTA_GATT_SRVC_ID));
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetNextIncludedService
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to find the next included service of the
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_start_id: start the search from the next record
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  after the one identified by p_start_id.
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_uuid_cond: Included service UUID, if NULL find the first available
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               included service.
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_result: output parameter which will store the GATT ID
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              of the included service found.
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetNextIncludedService(UINT16 conn_id,
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   tBTA_GATTC_INCL_SVC_ID *p_start_id,
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   tBT_UUID               *p_uuid_cond,
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   tBTA_GATTC_INCL_SVC_ID *p_result)
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_start_id || !p_result)
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id,
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BTA_GATTC_ATTR_TYPE_INCL_SRVC,
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_id->srvc_id,
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_id->incl_svc_id.id,
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_uuid_cond,
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_result->incl_svc_id.id,
5126975b4d711142b885af479721cada448952c6b41Andre Eisenbach                                        (void *)&p_result->incl_svc_id.is_primary))
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_result->srvc_id, &p_start_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadCharacteristic
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read a service's characteristics of
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    the given characteritisc ID.
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connectino ID.
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - characteritic ID to read.
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ReadCharacteristic(UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  tBTA_GATT_AUTH_REQ auth_req)
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_READ  *p_buf;
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_READ *) GKI_getbuf(sizeof(tBTA_GATTC_API_READ))) != NULL)
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_READ));
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
5496975b4d711142b885af479721cada448952c6b41Andre Eisenbach        p_buf->p_descr_type = NULL;
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadCharDescr
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read a characteristics descriptor.
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_descr_id - characteritic descriptor ID to read.
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ReadCharDescr (UINT16 conn_id,
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_GATTC_CHAR_DESCR_ID  *p_descr_id,
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_GATT_AUTH_REQ auth_req)
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_READ  *p_buf;
5736975b4d711142b885af479721cada448952c6b41Andre Eisenbach    UINT16  len = (UINT16)(sizeof(tBTA_GATT_ID) + sizeof(tBTA_GATTC_API_READ));
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5756975b4d711142b885af479721cada448952c6b41Andre Eisenbach    if ((p_buf = (tBTA_GATTC_API_READ *) GKI_getbuf(len)) != NULL)
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_READ));
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_descr_id->char_id.srvc_id, sizeof(tBTA_GATT_SRVC_ID));
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_descr_id->char_id.char_id, sizeof(tBTA_GATT_ID));
5856975b4d711142b885af479721cada448952c6b41Andre Eisenbach        p_buf->p_descr_type  = (tBTA_GATT_ID *)(p_buf + 1);
5866975b4d711142b885af479721cada448952c6b41Andre Eisenbach
5876975b4d711142b885af479721cada448952c6b41Andre Eisenbach        memcpy(p_buf->p_descr_type, &p_descr_id->descr_id, sizeof(tBTA_GATT_ID));
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadMultiple
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read multiple characteristic or
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  characteristic descriptors.
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connectino ID.
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_read_multi - pointer to the read multiple parameter.
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ReadMultiple(UINT16 conn_id, tBTA_GATTC_MULTI *p_read_multi,
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            tBTA_GATT_AUTH_REQ auth_req)
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_READ_MULTI  *p_buf;
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_ATTR_ID          *p_value;
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      len = (UINT16)(sizeof(tBTA_GATTC_API_READ_MULTI) +
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_read_multi->num_attr * sizeof(tBTA_GATTC_ATTR_ID));
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       i;
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_READ_MULTI *) GKI_getbuf(len)) != NULL)
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT;
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->num_attr = p_read_multi->num_attr;
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_buf->num_attr > 0)
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_id_list = p_value = (tBTA_GATTC_ATTR_ID *)(p_buf + 1);
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (i = 0; i < p_buf->num_attr; i ++, p_value ++)
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(p_value, &p_read_multi->id_list[i], sizeof(tBTA_GATTC_ATTR_ID));
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_WriteCharValue
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to write characteristic value.
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - characteristic ID to write.
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    write_type - type of write.
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  len: length of the data to be written.
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_WriteCharValue ( UINT16 conn_id,
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATTC_CHAR_ID *p_char_id,
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATTC_WRITE_TYPE  write_type,
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT16 len,
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT8 *p_value,
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATT_AUTH_REQ auth_req)
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_WRITE  *p_buf;
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTC_API_WRITE) + len))) != NULL)
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_WRITE) + len);
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->write_type = write_type;
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->len = len;
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_value && len > 0)
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_value = (UINT8 *)(p_buf + 1);
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->p_value, p_value, len);
6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_WriteCharDescr
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to write characteristic descriptor value.
6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID
6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_descr_id - characteristic descriptor ID to write.
6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  write_type - write type.
6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_WriteCharDescr (UINT16 conn_id,
7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATTC_CHAR_DESCR_ID *p_char_descr_id,
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATTC_WRITE_TYPE  write_type,
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATT_UNFMT      *p_data,
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATT_AUTH_REQ auth_req)
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_WRITE  *p_buf;
7106975b4d711142b885af479721cada448952c6b41Andre Eisenbach    UINT16  len = sizeof(tBTA_GATTC_API_WRITE) + sizeof(tBTA_GATT_ID);
711ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
712ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_data != NULL)
713ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        len += p_data->len;
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf(len)) != NULL)
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_descr_id->char_id.srvc_id, sizeof(tBTA_GATT_SRVC_ID));
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_descr_id->char_id.char_id, sizeof(tBTA_GATT_ID));
7256975b4d711142b885af479721cada448952c6b41Andre Eisenbach        p_buf->p_descr_type = (tBTA_GATT_ID *)(p_buf + 1);
7266975b4d711142b885af479721cada448952c6b41Andre Eisenbach        memcpy(p_buf->p_descr_type, &p_char_descr_id->descr_id, sizeof(tBTA_GATT_ID));
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->write_type = write_type;
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data && p_data->len != 0)
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7316975b4d711142b885af479721cada448952c6b41Andre Eisenbach            p_buf->p_value  = (UINT8 *)(p_buf->p_descr_type + 1);
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->len      = p_data->len;
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* pack the descr data */
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->p_value, p_data->p_value, p_data->len);
7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_PrepareWrite
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to prepare write a characteristic value.
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - GATT characteritic ID of the service.
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  offset - offset of the write value.
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  len: length of the data to be written.
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_PrepareWrite  (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT16 offset, UINT16 len, UINT8 *p_value,
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_GATT_AUTH_REQ auth_req)
7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_WRITE  *p_buf;
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTC_API_WRITE) + len))) != NULL)
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_WRITE) + len);
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->write_type = BTA_GATTC_WRITE_PREPARE;
7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->offset   = offset;
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->len = len;
7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_value && len > 0)
7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_value = (UINT8 *)(p_buf + 1);
7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->p_value, p_value, len);
7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
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** Function         BTA_GATTC_ExecuteWrite
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to execute write a prepare write sequence.
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    is_execute - execute or cancel.
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ExecuteWrite  (UINT16 conn_id, BOOLEAN is_execute)
8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_EXEC  *p_buf;
8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_EXEC *) GKI_getbuf((UINT16)sizeof(tBTA_GATTC_API_EXEC))) != NULL)
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_EXEC));
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT;
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_execute = is_execute;
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_SendIndConfirm
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to send handle value confirmation.
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - characteristic ID to confirm.
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_SendIndConfirm (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id)
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_CONFIRM  *p_buf;
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_API3("BTA_GATTC_SendIndConfirm conn_id=%d service uuid1=0x%x char uuid=0x%x",
836ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    conn_id, p_char_id->srvc_id.id.uuid.uu.uuid16, p_char_id->char_id.uuid.uu.uuid16);
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_CONFIRM *) GKI_getbuf(sizeof(tBTA_GATTC_API_CONFIRM))) != NULL)
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_CONFIRM));
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT;
8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_RegisterForNotifications
8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to register for notification of a service.
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface.
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bda - target GATT server.
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_id - pointer to GATT characteristic ID.
8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          OK if registration succeed, otherwise failed.
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF client_if,
8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                     BD_ADDR bda,
8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                     tBTA_GATTC_CHAR_ID *p_char_id)
8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_RCB      *p_clreg;
8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status = BTA_GATT_ILLEGAL_PARAMETER;
8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_char_id)
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR0("deregistration failed, unknow char id");
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return status;
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* lock other GKI task */
8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_lock();
8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL)
8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if ( p_clreg->notif_reg[i].in_use &&
889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                 !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                  bta_gattc_charid_compare(&p_clreg->notif_reg[i].char_id, p_char_id))
8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                APPL_TRACE_WARNING0("notification already registered");
8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BTA_GATT_OK;
8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
897ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (status != BTA_GATT_OK)
8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                if (!p_clreg->notif_reg[i].in_use)
902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    memset((void *)&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_clreg->notif_reg[i].in_use = TRUE;
906ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    memcpy(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN);
907ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
908ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_clreg->notif_reg[i].char_id.srvc_id.is_primary = p_char_id->srvc_id.is_primary;
909ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    bta_gattc_cpygattid(&p_clreg->notif_reg[i].char_id.srvc_id.id, &p_char_id->srvc_id.id);
910ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    bta_gattc_cpygattid(&p_clreg->notif_reg[i].char_id.char_id, &p_char_id->char_id);
911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    status = BTA_GATT_OK;
913ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    break;
914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (i == BTA_GATTC_NOTIF_REG_MAX)
917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                status = BTA_GATT_NO_RESOURCES;
919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                APPL_TRACE_ERROR0("Max Notification Reached, registration failed.");
920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR1("Client_if: %d Not Registered", client_if);
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_unlock();
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_DeregisterForNotifications
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to de-register for notification of a service.
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface.
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bda - target GATT server.
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_id - pointer to GATT characteristic ID.
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          OK if deregistration succeed, otherwise failed.
9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF client_if,
9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       BD_ADDR bda,
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       tBTA_GATTC_CHAR_ID *p_char_id)
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_RCB      *p_clreg;
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status = BTA_GATT_ILLEGAL_PARAMETER;
9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_char_id)
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR0("deregistration failed, unknow char id");
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return status;
9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* lock other GKI task */
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_lock();
9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL)
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_clreg->notif_reg[i].in_use &&
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_gattc_charid_compare(&p_clreg->notif_reg[i].char_id, p_char_id))
9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                APPL_TRACE_DEBUG0("Deregistered.");
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BTA_GATT_OK;
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (i == BTA_GATTC_NOTIF_REG_MAX)
9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BTA_GATT_ERROR;
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            APPL_TRACE_ERROR0("registration not found");
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR1("Client_if: %d Not Registered", client_if);
9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_unlock();
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         BTA_GATTC_Refresh
997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Refresh the server cache of the remote device
999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters       remote_bda: remote device BD address.
1001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
1003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
1005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid BTA_GATTC_Refresh(BD_ADDR remote_bda)
1006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_API_OPEN  *p_buf;
1008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((p_buf = (tBTA_GATTC_API_OPEN *) GKI_getbuf(sizeof(tBTA_GATTC_API_OPEN))) != NULL)
1010ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1011ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_buf->hdr.event = BTA_GATTC_API_REFRESH_EVT;
1012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
1014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_sys_sendmsg(p_buf);
1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return;
1019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
10205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
10215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach/*******************************************************************************
10225c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
10235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Function         BTA_GATTC_Listen
10245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
10255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Description      Start advertisement to listen for connection request for a GATT
10265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  client application.
10275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
10285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Parameters       client_if: server interface.
10295c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  start: to start or stop listening for connection
10305c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  remote_bda: remote device BD address, if listen to all device
10315c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                              use NULL.
10325c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
10335c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Returns          void
10345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
10355c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach*******************************************************************************/
10365c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachvoid BTA_GATTC_Listen(tBTA_GATTC_IF client_if, BOOLEAN start, BD_ADDR_PTR target_bda)
10375c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
10385c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    tBTA_GATTC_API_LISTEN  *p_buf;
10395c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
10405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    if ((p_buf = (tBTA_GATTC_API_LISTEN *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTC_API_LISTEN) + BD_ADDR_LEN))) != NULL)
10415c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    {
10425c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        p_buf->hdr.event = BTA_GATTC_API_LISTEN_EVT;
10435c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
10445c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        p_buf->client_if = client_if;
10455c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        p_buf->start = start;
10465c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        if (target_bda)
10475c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
10485c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            p_buf->remote_bda = (UINT8*)(p_buf + 1);
10495c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            memcpy(p_buf->remote_bda, target_bda, BD_ADDR_LEN);
10505c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
10515c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        else
10525c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            p_buf->remote_bda = NULL;
10535c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
10545c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        bta_sys_sendmsg(p_buf);
10555c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    }
10565c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    return;
10575c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
10585c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
1059a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach/*******************************************************************************
1060a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
1061a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Function         BTA_GATTC_Broadcast
1062a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
1063a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Description      Start broadcasting (non-connectable advertisements)
1064a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
1065a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Parameters       client_if: client interface.
1066a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**                  start: to start or stop listening for connection
1067a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
1068a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Returns          void
1069a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
1070a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach*******************************************************************************/
1071a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbachvoid BTA_GATTC_Broadcast(tBTA_GATTC_IF client_if, BOOLEAN start)
1072a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach{
1073a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach    tBTA_GATTC_API_LISTEN  *p_buf;
1074a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach
1075a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach    if ((p_buf = (tBTA_GATTC_API_LISTEN *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTC_API_LISTEN) + BD_ADDR_LEN))) != NULL)
1076a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach    {
1077a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach        p_buf->hdr.event = BTA_GATTC_API_BROADCAST_EVT;
1078a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach        p_buf->client_if = client_if;
1079a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach        p_buf->start = start;
1080a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach        bta_sys_sendmsg(p_buf);
1081a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach    }
1082a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach    return;
1083a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach}
1084a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */
1086ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1087