bta_gattc_api.cc revision ead3cde4bac0c3e32cd31f149093f004eef8ceeb
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
35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*****************************************************************************
37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Externs
38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*****************************************************************************/
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BTA_DYNAMIC_MEMORY == FALSE
40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern tBTA_GATTC_CB  bta_gattc_cb;
41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Constants
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const tBTA_SYS_REG bta_gatt_reg =
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_gattc_hdl_event,
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    NULL        /* need a disable functino to be called when BT is disabled */
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         BTA_GATTC_Init
56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description     This function is called to initalize GATTC module
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters       None
60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          None
62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid BTA_GATTC_Init()
65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memset(&bta_gattc_cb, 0, sizeof(tBTA_GATTC_CB));
67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
69ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_AppRegister
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to register application callbacks
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    with BTA GATTC module.
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       p_app_uuid - applicaiton UUID
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_client_cb - pointer to the application callback function.
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb)
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_REG  *p_buf;
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* register with BTA system manager */
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_lock();
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_sys_register(BTA_ID_GATTC, &bta_gatt_reg);
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_unlock();
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_REG *) GKI_getbuf(sizeof(tBTA_GATTC_API_REG))) != NULL)
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event    = BTA_GATTC_API_REG_EVT;
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_app_uuid != NULL)
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID));
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->p_cback      = p_client_cb;
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_AppDeregister
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to deregister an application
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from BTA GATTC module.
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface identifier.
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if)
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_DEREG  *p_buf;
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_DEREG *) GKI_getbuf(sizeof(tBTA_GATTC_API_DEREG))) != NULL)
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_DEREG_EVT;
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->client_if = client_if;
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_Open
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Open a direct connection or add a background auto connection
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if: server interface.
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, BOOLEAN is_direct)
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_OPEN  *p_buf;
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_OPEN *) GKI_getbuf(sizeof(tBTA_GATTC_API_OPEN))) != NULL)
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT;
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->client_if = client_if;
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_direct = is_direct;
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_CancelOpen
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancel a direct open connection or remove a background auto connection
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if: server interface.
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, BOOLEAN is_direct)
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_CANCEL_OPEN  *p_buf;
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_CANCEL_OPEN *) GKI_getbuf(sizeof(tBTA_GATTC_API_CANCEL_OPEN))) != NULL)
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT;
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->client_if = client_if;
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_direct = is_direct;
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_Close
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Close a connection to a GATT server.
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connectino ID to be closed.
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_Close(UINT16 conn_id)
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->event = BTA_GATTC_API_CLOSE_EVT;
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->layer_specific = conn_id;
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ServiceSearchRequest
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to request a GATT service discovery
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    on a GATT server. This function report service search result
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  by a callback event, and followed by a service search complete
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  event.
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID.
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_srvc_uuid: a UUID of the service application is interested in.
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              If Null, discover for all services.
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ServiceSearchRequest (UINT16 conn_id, tBT_UUID *p_srvc_uuid)
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_SEARCH  *p_buf;
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(tBT_UUID);
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_SEARCH *) GKI_getbuf(len)) != NULL)
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT;
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_srvc_uuid)
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(&p_buf->srvc_uuid, p_srvc_uuid, sizeof(tBT_UUID));
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetFirstChar
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the first characteristic of the
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_srvc_id: the service ID of which the characteristic is belonged to.
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_uuid_cond: Characteristic UUID, if NULL find the first available
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_result: output parameter which will store the GATT
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic ID.
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_property: output parameter to carry the characteristic property.
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetFirstChar (UINT16 conn_id, tBTA_GATT_SRVC_ID *p_srvc_id,
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBT_UUID *p_char_uuid_cond,
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_GATTC_CHAR_ID *p_char_result,
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                          tBTA_GATT_CHAR_PROP *p_property)
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_srvc_id || !p_char_result)
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id, BTA_GATTC_ATTR_TYPE_CHAR, p_srvc_id, NULL,
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_char_uuid_cond, &p_char_result->char_id, p_property))
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_char_result->srvc_id, p_srvc_id, sizeof(tBTA_GATT_SRVC_ID));
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetNextChar
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the next characteristic of the
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_start_char_id: start the characteristic search from the next record
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                           after the one identified by char_id.
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_uuid_cond: Characteristic UUID, if NULL find the first available
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_result: output parameter which will store the GATT
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic ID.
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_property: output parameter to carry the characteristic property.
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetNextChar (UINT16 conn_id,
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_GATTC_CHAR_ID *p_start_char_id,
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBT_UUID           *p_char_uuid_cond,
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_GATTC_CHAR_ID *p_char_result,
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         tBTA_GATT_CHAR_PROP    *p_property)
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_start_char_id || !p_char_result)
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id, BTA_GATTC_ATTR_TYPE_CHAR,
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_char_id->srvc_id,
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_char_id->char_id,
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_char_uuid_cond,
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_char_result->char_id,
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_property))
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_char_result->srvc_id, &p_start_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetFirstCharDescr
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the first characteristic descriptor of the
342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  characteristic on the given server.
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_id: the characteristic ID of which the descriptor is belonged to.
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_uuid_cond: Characteristic Descr UUID, if NULL find the first available
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_result: output parameter which will store the GATT
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic descriptor ID.
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetFirstCharDescr (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                tBT_UUID *p_descr_uuid_cond,
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                tBTA_GATTC_CHAR_DESCR_ID *p_descr_result)
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_char_id || !p_descr_result)
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_descr_result, 0, sizeof(tBTA_GATTC_CHAR_DESCR_ID));
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id,
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BTA_GATTC_ATTR_TYPE_CHAR_DESCR,
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_char_id->srvc_id,
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_char_id->char_id,
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_descr_uuid_cond,
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_descr_result->char_id.char_id,
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        NULL))
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_descr_result->descr_type, &p_descr_result->char_id.char_id.uuid, sizeof(tBT_UUID));
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_descr_result->char_id, p_char_id, sizeof(tBTA_GATTC_CHAR_ID));
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetNextCharDescr
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function is called to find the next characteristic descriptor
386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  of the characterisctic.
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_start_descr_id: start the characteristic search from the next record
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                           after the one identified by p_start_descr_id.
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_uuid_cond: Characteristic descriptor UUID, if NULL find
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               the first available characteristic descriptor.
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_result: output parameter which will store the GATT
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  characteristic descriptor ID.
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetNextCharDescr (UINT16 conn_id,
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                             tBTA_GATTC_CHAR_DESCR_ID *p_start_descr_id,
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                             tBT_UUID           *p_descr_uuid_cond,
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                             tBTA_GATTC_CHAR_DESCR_ID *p_descr_result)
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_start_descr_id || !p_descr_result)
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p_descr_result, 0, sizeof(tBTA_GATTC_CHAR_DESCR_ID));
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id, BTA_GATTC_ATTR_TYPE_CHAR_DESCR,
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_descr_id->char_id.srvc_id,
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_descr_id->char_id.char_id,
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_descr_uuid_cond,
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_descr_result->char_id.char_id,
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (void *)&p_start_descr_id->descr_type))
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_descr_result->descr_type, &p_descr_result->char_id.char_id.uuid, sizeof(tBT_UUID));
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_descr_result->char_id, p_start_descr_id, sizeof(tBTA_GATTC_CHAR_ID));
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetFirstIncludedService
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to find the first included service of the
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_srvc_id: the service ID of which the characteristic is belonged to.
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_uuid_cond: Characteristic UUID, if NULL find the first available
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               characteristic.
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_result: output parameter which will store the GATT ID
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              of the included service found.
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetFirstIncludedService(UINT16 conn_id, tBTA_GATT_SRVC_ID *p_srvc_id,
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                    tBT_UUID *p_uuid_cond, tBTA_GATTC_INCL_SVC_ID *p_result)
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_srvc_id || !p_result)
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id,
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BTA_GATTC_ATTR_TYPE_INCL_SRVC,
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_srvc_id,
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        NULL,
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_uuid_cond,
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_result->incl_svc_id.id,
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (tBTA_GATT_CHAR_PROP *)&p_result->incl_svc_id.is_primary))
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_result->srvc_id, p_srvc_id, sizeof(tBTA_GATT_SRVC_ID));
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_GetNextIncludedService
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to find the next included service of the
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service on the given server.
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_start_id: start the search from the next record
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                  after the one identified by p_start_id.
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_uuid_cond: Included service UUID, if NULL find the first available
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                               included service.
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_result: output parameter which will store the GATT ID
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              of the included service found.
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS  BTA_GATTC_GetNextIncludedService(UINT16 conn_id,
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   tBTA_GATTC_INCL_SVC_ID *p_start_id,
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   tBT_UUID               *p_uuid_cond,
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                   tBTA_GATTC_INCL_SVC_ID *p_result)
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status;
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_start_id || !p_result)
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTA_GATT_ILLEGAL_PARAMETER;
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((status = bta_gattc_query_cache(conn_id,
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BTA_GATTC_ATTR_TYPE_INCL_SRVC,
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_id->srvc_id,
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_start_id->incl_svc_id.id,
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        p_uuid_cond,
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &p_result->incl_svc_id.id,
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (tBTA_GATT_CHAR_PROP *)&p_result->incl_svc_id.is_primary))
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        == BTA_GATT_OK)
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_result->srvc_id, &p_start_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadCharacteristic
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read a service's characteristics of
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    the given characteritisc ID.
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connectino ID.
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - characteritic ID to read.
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ReadCharacteristic(UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  tBTA_GATT_AUTH_REQ auth_req)
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_READ  *p_buf;
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_READ *) GKI_getbuf(sizeof(tBTA_GATTC_API_READ))) != NULL)
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_READ));
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadCharDescr
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read a characteristics descriptor.
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_descr_id - characteritic descriptor ID to read.
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ReadCharDescr (UINT16 conn_id,
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_GATTC_CHAR_DESCR_ID  *p_descr_id,
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_GATT_AUTH_REQ auth_req)
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_READ  *p_buf;
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_READ *) GKI_getbuf(sizeof(tBTA_GATTC_API_READ))) != NULL)
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_READ));
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_descr_id->char_id.srvc_id, sizeof(tBTA_GATT_SRVC_ID));
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_descr_id->char_id.char_id, sizeof(tBTA_GATT_ID));
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->descr_type, &p_descr_id->descr_type, sizeof(tBT_UUID));
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadMultiple
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read multiple characteristic or
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  characteristic descriptors.
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connectino ID.
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_read_multi - pointer to the read multiple parameter.
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ReadMultiple(UINT16 conn_id, tBTA_GATTC_MULTI *p_read_multi,
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            tBTA_GATT_AUTH_REQ auth_req)
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_READ_MULTI  *p_buf;
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_ATTR_ID          *p_value;
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      len = (UINT16)(sizeof(tBTA_GATTC_API_READ_MULTI) +
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               p_read_multi->num_attr * sizeof(tBTA_GATTC_ATTR_ID));
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       i;
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_READ_MULTI *) GKI_getbuf(len)) != NULL)
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT;
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->num_attr = p_read_multi->num_attr;
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_buf->num_attr > 0)
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_id_list = p_value = (tBTA_GATTC_ATTR_ID *)(p_buf + 1);
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (i = 0; i < p_buf->num_attr; i ++, p_value ++)
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(p_value, &p_read_multi->id_list[i], sizeof(tBTA_GATTC_ATTR_ID));
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_WriteCharValue
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to write characteristic value.
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - characteristic ID to write.
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    write_type - type of write.
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  len: length of the data to be written.
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_WriteCharValue ( UINT16 conn_id,
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATTC_CHAR_ID *p_char_id,
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATTC_WRITE_TYPE  write_type,
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT16 len,
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT8 *p_value,
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATT_AUTH_REQ auth_req)
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_WRITE  *p_buf;
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTC_API_WRITE) + len))) != NULL)
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_WRITE) + len);
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->write_type = write_type;
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->len = len;
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_value && len > 0)
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_value = (UINT8 *)(p_buf + 1);
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->p_value, p_value, len);
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_WriteCharDescr
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to write characteristic descriptor value.
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_descr_id - characteristic descriptor ID to write.
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  write_type - write type.
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_WriteCharDescr (UINT16 conn_id,
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATTC_CHAR_DESCR_ID *p_char_descr_id,
6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATTC_WRITE_TYPE  write_type,
6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATT_UNFMT      *p_data,
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATT_AUTH_REQ auth_req)
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_WRITE  *p_buf;
694ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16  len = sizeof(tBTA_GATTC_API_WRITE);
695ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
696ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_data != NULL)
697ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        len += p_data->len;
6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf(len)) != NULL)
7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_descr_id->char_id.srvc_id, sizeof(tBTA_GATT_SRVC_ID));
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_descr_id->char_id.char_id, sizeof(tBTA_GATT_ID));
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->descr_type, &p_char_descr_id->descr_type, sizeof(tBT_UUID));
7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->write_type = write_type;
7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data && p_data->len != 0)
7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_value  = (UINT8 *)(p_buf + 1);
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->len      = p_data->len;
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* pack the descr data */
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->p_value, p_data->p_value, p_data->len);
7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_PrepareWrite
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to prepare write a characteristic value.
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - GATT characteritic ID of the service.
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  offset - offset of the write value.
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  len: length of the data to be written.
7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_PrepareWrite  (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT16 offset, UINT16 len, UINT8 *p_value,
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_GATT_AUTH_REQ auth_req)
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_WRITE  *p_buf;
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_WRITE *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTC_API_WRITE) + len))) != NULL)
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_WRITE) + len);
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->auth_req = auth_req;
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->write_type = BTA_GATTC_WRITE_PREPARE;
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->offset   = offset;
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->len = len;
7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_value && len > 0)
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_value = (UINT8 *)(p_buf + 1);
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->p_value, p_value, len);
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ExecuteWrite
7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to execute write a prepare write sequence.
7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    is_execute - execute or cancel.
7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ExecuteWrite  (UINT16 conn_id, BOOLEAN is_execute)
7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_EXEC  *p_buf;
7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_EXEC *) GKI_getbuf((UINT16)sizeof(tBTA_GATTC_API_EXEC))) != NULL)
7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_EXEC));
7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT;
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_execute = is_execute;
7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_SendIndConfirm
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to send handle value confirmation.
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - characteristic ID to confirm.
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_SendIndConfirm (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id)
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_API_CONFIRM  *p_buf;
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    APPL_TRACE_API3("BTA_GATTC_SendIndConfirm conn_id=%d service uuid1=0x%x char uuid=0x%x",
819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    conn_id, p_char_id->srvc_id.id.uuid.uu.uuid16, p_char_id->char_id.uuid.uu.uuid16);
8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTC_API_CONFIRM *) GKI_getbuf(sizeof(tBTA_GATTC_API_CONFIRM))) != NULL)
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTC_API_CONFIRM));
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT;
8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->srvc_id, &p_char_id->srvc_id, sizeof(tBTA_GATT_SRVC_ID));
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->char_id, &p_char_id->char_id, sizeof(tBTA_GATT_ID));
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_RegisterForNotifications
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to register for notification of a service.
8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface.
8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bda - target GATT server.
8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_id - pointer to GATT characteristic ID.
8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          OK if registration succeed, otherwise failed.
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF client_if,
8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                     BD_ADDR bda,
8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                     tBTA_GATTC_CHAR_ID *p_char_id)
8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_RCB      *p_clreg;
8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status = BTA_GATT_ILLEGAL_PARAMETER;
8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_char_id)
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR0("deregistration failed, unknow char id");
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return status;
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* lock other GKI task */
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_lock();
8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL)
8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
871ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if ( p_clreg->notif_reg[i].in_use &&
872ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                 !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
873ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                  bta_gattc_charid_compare(&p_clreg->notif_reg[i].char_id, p_char_id))
8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
875ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                APPL_TRACE_WARNING0("notification already registered");
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BTA_GATT_OK;
8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
880ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (status != BTA_GATT_OK)
8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
882ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
883ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
884ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                if (!p_clreg->notif_reg[i].in_use)
885ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
886ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    memset((void *)&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_clreg->notif_reg[i].in_use = TRUE;
889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    memcpy(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN);
890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
891ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_clreg->notif_reg[i].char_id.srvc_id.is_primary = p_char_id->srvc_id.is_primary;
892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    bta_gattc_cpygattid(&p_clreg->notif_reg[i].char_id.srvc_id.id, &p_char_id->srvc_id.id);
893ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    bta_gattc_cpygattid(&p_clreg->notif_reg[i].char_id.char_id, &p_char_id->char_id);
894ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
895ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    status = BTA_GATT_OK;
896ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    break;
897ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
898ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (i == BTA_GATTC_NOTIF_REG_MAX)
900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                status = BTA_GATT_NO_RESOURCES;
902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                APPL_TRACE_ERROR0("Max Notification Reached, registration failed.");
903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR1("Client_if: %d Not Registered", client_if);
9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_unlock();
9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_DeregisterForNotifications
9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to de-register for notification of a service.
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface.
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bda - target GATT server.
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_id - pointer to GATT characteristic ID.
9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          OK if deregistration succeed, otherwise failed.
9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF client_if,
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       BD_ADDR bda,
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       tBTA_GATTC_CHAR_ID *p_char_id)
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_RCB      *p_clreg;
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status = BTA_GATT_ILLEGAL_PARAMETER;
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_char_id)
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR0("deregistration failed, unknow char id");
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return status;
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* lock other GKI task */
9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_lock();
9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL)
9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_clreg->notif_reg[i].in_use &&
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
952ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_gattc_charid_compare(&p_clreg->notif_reg[i].char_id, p_char_id))
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                APPL_TRACE_DEBUG0("Deregistered.");
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BTA_GATT_OK;
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (i == BTA_GATTC_NOTIF_REG_MAX)
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BTA_GATT_ERROR;
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            APPL_TRACE_ERROR0("registration not found");
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        APPL_TRACE_ERROR1("Client_if: %d Not Registered", client_if);
9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    GKI_sched_unlock();
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
977ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
978ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
979ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         BTA_GATTC_Refresh
980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Refresh the server cache of the remote device
982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters       remote_bda: remote device BD address.
984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
985ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
987ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid BTA_GATTC_Refresh(BD_ADDR remote_bda)
989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_API_OPEN  *p_buf;
991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((p_buf = (tBTA_GATTC_API_OPEN *) GKI_getbuf(sizeof(tBTA_GATTC_API_OPEN))) != NULL)
993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_buf->hdr.event = BTA_GATTC_API_REFRESH_EVT;
995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_sys_sendmsg(p_buf);
1000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return;
1002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */
1004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1005