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>
30258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatt_api.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gattc_int.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Constants
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachstatic const tBTA_SYS_REG bta_gattc_reg =
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_gattc_hdl_event,
42e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    BTA_GATTC_Disable
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Function         BTA_GATTC_Disable
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
50e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Description      This function is called to disable GATTC module
51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
52e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Parameters       None.
53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          None
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
57e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachvoid BTA_GATTC_Disable(void)
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
59e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if (bta_sys_is_register(BTA_ID_GATTC) == FALSE)
60e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
61e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("GATTC Module not enabled/already disabled");
62e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        return;
63e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
64e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
655fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR));
665fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->event = BTA_GATTC_API_DISABLE_EVT;
675fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
685fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_deregister(BTA_ID_GATTC);
70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_AppRegister
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to register application callbacks
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    with BTA GATTC module.
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       p_app_uuid - applicaiton UUID
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_client_cb - pointer to the application callback function.
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb)
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
875fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_REG *p_buf =
885fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_REG *)osi_malloc(sizeof(tBTA_GATTC_API_REG));
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
90e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if (bta_sys_is_register(BTA_ID_GATTC) == FALSE)
91e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg);
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
935fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_REG_EVT;
945fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (p_app_uuid != NULL)
955fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID));
965fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->p_cback = p_client_cb;
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
985fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_AppDeregister
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to deregister an application
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  from BTA GATTC module.
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface identifier.
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if)
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1155fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_DEREG *p_buf =
1165fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_DEREG *)osi_malloc(sizeof(tBTA_GATTC_API_DEREG));
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_DEREG_EVT;
1195fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->client_if = client_if;
1205fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
1215fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_Open
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Open a direct connection or add a background auto connection
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if: server interface.
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
1347fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**                  transport: Transport to be used for GATT connection (BREDR/LE)
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battavoid BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda,
1407fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    BOOLEAN is_direct, tBTA_GATT_TRANSPORT transport)
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_OPEN *p_buf =
1435fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov       (tBTA_GATTC_API_OPEN *) osi_malloc(sizeof(tBTA_GATTC_API_OPEN));
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT;
1465fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->client_if = client_if;
1475fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->is_direct = is_direct;
1485fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->transport = transport;
1495fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1515fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_CancelOpen
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancel a direct open connection or remove a background auto connection
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if: server interface.
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, BOOLEAN is_direct)
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_CANCEL_OPEN *p_buf =
1715fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_CANCEL_OPEN *)osi_malloc(sizeof(tBTA_GATTC_API_CANCEL_OPEN));
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1735fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT;
1745fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->client_if = client_if;
1755fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->is_direct = is_direct;
1765fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_Close
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Close a connection to a GATT server.
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connectino ID to be closed.
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_Close(UINT16 conn_id)
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1945fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR));
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1965fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->event = BTA_GATTC_API_CLOSE_EVT;
1975fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->layer_specific = conn_id;
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1995fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2015fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2049426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach** Function         BTA_GATTC_ConfigureMTU
2059426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach**
2069426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach** Description      Configure the MTU size in the GATT channel. This can be done
2079426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach**                  only once per connection.
2089426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach**
2099426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach** Parameters       conn_id: connection ID.
2109426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach**                  mtu: desired MTU size to use.
2119426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach**
2129426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach** Returns          void
2139426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach**
2149426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach*******************************************************************************/
2159426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachvoid BTA_GATTC_ConfigureMTU (UINT16 conn_id, UINT16 mtu)
2169426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{
2175fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_CFG_MTU *p_buf =
2185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_CFG_MTU *)osi_malloc(sizeof(tBTA_GATTC_API_CFG_MTU));
2199426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
2205fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_CFG_MTU_EVT;
2215fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
2225fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->mtu = mtu;
2239426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
2245fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
2259426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach}
2265fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
2279426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach/*******************************************************************************
2289426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach**
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ServiceSearchRequest
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to request a GATT service discovery
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    on a GATT server. This function report service search result
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  by a callback event, and followed by a service search complete
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  event.
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID.
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_srvc_uuid: a UUID of the service application is interested in.
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              If Null, discover for all services.
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ServiceSearchRequest (UINT16 conn_id, tBT_UUID *p_srvc_uuid)
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    const size_t len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(tBT_UUID);
2465fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_SEARCH *p_buf = (tBTA_GATTC_API_SEARCH *)osi_calloc(len);
2475fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
2485fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT;
2495fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
2505fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (p_srvc_uuid) {
2515fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_buf->p_srvc_uuid = (tBT_UUID *)(p_buf + 1);
2525fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        memcpy(p_buf->p_srvc_uuid, p_srvc_uuid, sizeof(tBT_UUID));
2535fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    } else {
2545fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_buf->p_srvc_uuid = NULL;
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2575fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
2585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov}
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26236b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Function         BTA_GATTC_GetServices
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26436b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Description      This function is called to find the services on the given server.
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connection ID which identify the server.
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26836b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Returns          returns list_t of tBTA_GATTC_SERVICE or NULL.
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27136b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowskiconst list_t* BTA_GATTC_GetServices(UINT16 conn_id) {
27236b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski    return bta_gattc_get_services(conn_id);
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27736b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Function         BTA_GATTC_GetCharacteristic
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27936b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Description      This function is called to find the characteristic on the given server.
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Parameters       conn_id - connection ID which identify the server.
28226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - characteristic handle
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28436b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Returns          returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL.
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
28736b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowskiconst tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(UINT16 conn_id, UINT16 handle) {
28836b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski    return bta_gattc_get_characteristic(conn_id, handle);
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29326f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Function         BTA_GATTC_GetDescriptor
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29536b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Description      This function is called to find the characteristic on the given server.
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29726f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Parameters       conn_id - connection ID which identify the server.
29826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - descriptor handle
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30036b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski** Returns          returns pointer to tBTA_GATTC_DESCRIPTOR or NULL.
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30336b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowskiconst tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(UINT16 conn_id, UINT16 handle) {
30436b67072266468e4b4becc76c0ddbff6154bb12cJakub Pawlowski    return bta_gattc_get_descriptor(conn_id, handle);
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
309533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski** Function         BTA_GATTC_GetGattDb
310533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski**
311533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski** Description      This function is called to get the GATT database.
312533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski**
313533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski** Parameters       conn_id: connection ID which identify the server.
314533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski**                  db: output parameter which will contain the GATT database copy.
315533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski**                      Caller is responsible for freeing it.
316533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski**                  count: number of elements in database.
317533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski**
318533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski*******************************************************************************/
31912339a801146d45f8aab010b38c099082bfc80e5Jakub Pawlowskivoid  BTA_GATTC_GetGattDb(UINT16 conn_id, UINT16 start_handle, UINT16 end_handle,
32012339a801146d45f8aab010b38c099082bfc80e5Jakub Pawlowski                          btgatt_db_element_t **db, int *count)
321533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski{
32212339a801146d45f8aab010b38c099082bfc80e5Jakub Pawlowski    bta_gattc_get_gatt_db(conn_id, start_handle, end_handle, db, count);
323533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski}
324533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
325533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski/*******************************************************************************
326533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski**
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadCharacteristic
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32926f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Description      This function is called to read a characteristics value
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Parameters       conn_id - connection ID.
33226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - characteritic handle to read.
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33726f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowskivoid BTA_GATTC_ReadCharacteristic(UINT16 conn_id, UINT16 handle, tBTA_GATT_AUTH_REQ auth_req)
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3395fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_READ *p_buf =
3405fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_READ *)osi_calloc(sizeof(tBTA_GATTC_API_READ));
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
3435fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
3445fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->auth_req = auth_req;
34526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->handle = handle;
34626f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->cmpl_evt = BTA_GATTC_READ_CHAR_EVT;
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3485fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadCharDescr
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Description      This function is called to read a descriptor value.
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
35826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - descriptor handle to read.
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
36326f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowskivoid BTA_GATTC_ReadCharDescr (UINT16 conn_id, UINT16 handle, tBTA_GATT_AUTH_REQ auth_req)
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
36526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    tBTA_GATTC_API_READ *p_buf =
36626f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        (tBTA_GATTC_API_READ *)osi_calloc(sizeof(tBTA_GATTC_API_READ));
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3685fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
3695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
3705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->auth_req = auth_req;
37126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->handle = handle;
37226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->cmpl_evt = BTA_GATTC_READ_DESCR_EVT;
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3745fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3765fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ReadMultiple
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read multiple characteristic or
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  characteristic descriptors.
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connectino ID.
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_read_multi - pointer to the read multiple parameter.
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ReadMultiple(UINT16 conn_id, tBTA_GATTC_MULTI *p_read_multi,
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            tBTA_GATT_AUTH_REQ auth_req)
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3935fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_READ_MULTI *p_buf =
39426f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        (tBTA_GATTC_API_READ_MULTI *)osi_calloc(sizeof(tBTA_GATTC_API_READ_MULTI));
3955fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
3965fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT;
3975fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
3985fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->auth_req = auth_req;
3995fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->num_attr = p_read_multi->num_attr;
4005fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
40126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    if (p_buf->num_attr > 0)
40226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        memcpy(p_buf->handles, p_read_multi->handles, sizeof(UINT16) * p_read_multi->num_attr);
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4045fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
4055fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov}
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_WriteCharValue
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to write characteristic value.
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
41426f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - characteristic handle to write.
41526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  write_type - type of write.
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  len: length of the data to be written.
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_WriteCharValue ( UINT16 conn_id,
42326f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski                                UINT16 handle,
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATTC_WRITE_TYPE  write_type,
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT16 len,
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                UINT8 *p_value,
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                tBTA_GATT_AUTH_REQ auth_req)
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4295fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_WRITE  *p_buf =
4305fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_WRITE *)osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + len);
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4325fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
4335fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
4345fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->auth_req = auth_req;
43526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->handle = handle;
43626f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->cmpl_evt = BTA_GATTC_WRITE_CHAR_EVT;
4375fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->write_type = write_type;
4385fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->len = len;
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4405fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (p_value && len > 0) {
4415fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_buf->p_value = (UINT8 *)(p_buf + 1);
4425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        memcpy(p_buf->p_value, p_value, len);
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4445fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
4455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4475fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_WriteCharDescr
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Description      This function is called to write descriptor value.
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID
45526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - descriptor hadle to write.
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  write_type - write type.
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_WriteCharDescr (UINT16 conn_id,
46326f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski                               UINT16 handle,
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATTC_WRITE_TYPE  write_type,
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATT_UNFMT      *p_data,
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               tBTA_GATT_AUTH_REQ auth_req)
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
46826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    size_t len = sizeof(tBTA_GATTC_API_WRITE);
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_data != NULL)
471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        len += p_data->len;
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4735fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_WRITE *p_buf = (tBTA_GATTC_API_WRITE *)osi_calloc(len);
4745fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
4755fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
4765fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->auth_req = auth_req;
47726f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->handle = handle;
47826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->cmpl_evt = BTA_GATTC_WRITE_DESCR_EVT;
4795fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->write_type = write_type;
4805fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
4815fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (p_data && p_data->len != 0) {
48226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        p_buf->p_value  = (UINT8 *)(p_buf + 1);
4835fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_buf->len      = p_data->len;
4845fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        /* pack the descr data */
4855fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        memcpy(p_buf->p_value, p_data->p_value, p_data->len);
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4885fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4905fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_PrepareWrite
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to prepare write a characteristic value.
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - GATT characteritic ID of the service.
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  offset - offset of the write value.
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  len: length of the data to be written.
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_value - the value to be written.
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50626f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowskivoid BTA_GATTC_PrepareWrite  (UINT16 conn_id, UINT16 handle,
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              UINT16 offset, UINT16 len, UINT8 *p_value,
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              tBTA_GATT_AUTH_REQ auth_req)
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5105fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_WRITE *p_buf =
5115fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_WRITE *)osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + len);
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5135fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
5145fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
5155fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->auth_req = auth_req;
51626f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->handle = handle;
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->write_type = BTA_GATTC_WRITE_PREPARE;
5195fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->offset   = offset;
5205fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->len = len;
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5225fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (p_value && len > 0) {
5235fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_buf->p_value = (UINT8 *)(p_buf + 1);
5245fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        memcpy(p_buf->p_value, p_value, len);
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5275fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5295fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_ExecuteWrite
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to execute write a prepare write sequence.
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    is_execute - execute or cancel.
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTC_ExecuteWrite  (UINT16 conn_id, BOOLEAN is_execute)
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5445fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_EXEC *p_buf =
5455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_EXEC *)osi_calloc(sizeof(tBTA_GATTC_API_EXEC));
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5475fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT;
5485fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
5495fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->is_execute = is_execute;
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5515fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5535fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_SendIndConfirm
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to send handle value confirmation.
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection ID.
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    p_char_id - characteristic ID to confirm.
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
56626f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowskivoid BTA_GATTC_SendIndConfirm (UINT16 conn_id, UINT16 handle)
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5685fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_CONFIRM *p_buf =
5695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_CONFIRM *)osi_calloc(sizeof(tBTA_GATTC_API_CONFIRM));
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
57126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    APPL_TRACE_API("%s conn_id=%d handle=0x%04x", __func__, conn_id, handle);
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5735fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT;
5745fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.layer_specific = conn_id;
57526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    p_buf->handle = handle;
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5775fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_RegisterForNotifications
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to register for notification of a service.
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface.
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bda - target GATT server.
58826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - GATT characteristic handle.
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          OK if registration succeed, otherwise failed.
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF client_if,
59426f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski                                                     BD_ADDR bda, UINT16 handle)
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTC_RCB      *p_clreg;
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATT_STATUS    status = BTA_GATT_ILLEGAL_PARAMETER;
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8               i;
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60026f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    if (!handle)
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
60226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        APPL_TRACE_ERROR("deregistration failed, handle is 0");
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return status;
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL)
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if ( p_clreg->notif_reg[i].in_use &&
611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                 !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
61226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski                  p_clreg->notif_reg[i].handle == handle)
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
614e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_WARNING("notification already registered");
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                status = BTA_GATT_OK;
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (status != BTA_GATT_OK)
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                if (!p_clreg->notif_reg[i].in_use)
624ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    memset((void *)&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
626ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_clreg->notif_reg[i].in_use = TRUE;
628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    memcpy(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN);
629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
63026f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski                    p_clreg->notif_reg[i].handle = handle;
631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    status = BTA_GATT_OK;
632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    break;
633ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
634ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
635ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (i == BTA_GATTC_NOTIF_REG_MAX)
636ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                status = BTA_GATT_NO_RESOURCES;
638e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_ERROR("Max Notification Reached, registration failed.");
639ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
644e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("Client_if: %d Not Registered", client_if);
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTC_DeregisterForNotifications
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
65426f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski** Description      This function is called to de-register for notification of a servbice.
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       client_if - client interface.
65726f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  remote_bda - target GATT server.
65826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski**                  handle - GATT characteristic handle.
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          OK if deregistration succeed, otherwise failed.
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF client_if,
66426f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski                                                       BD_ADDR bda, UINT16 handle)
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
66626f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    if (!handle) {
66726f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        APPL_TRACE_ERROR("%s: deregistration failed, handle is 0", __func__);
66826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        return BTA_GATT_ILLEGAL_PARAMETER;
66926f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    }
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
67126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    tBTA_GATTC_RCB *p_clreg = bta_gattc_cl_get_regcb(client_if);
67226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    if (p_clreg == NULL) {
67326f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        APPL_TRACE_ERROR("%s client_if: %d not registered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x",
67426f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski            __func__, client_if, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
67526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        return BTA_GATT_ILLEGAL_PARAMETER;
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
67826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    for (int i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++) {
67926f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        if (p_clreg->notif_reg[i].in_use &&
68026f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski            !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
68126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski            p_clreg->notif_reg[i].handle == handle) {
68226f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski            APPL_TRACE_DEBUG("%s deregistered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x",
683f8027005333c88a2f097cfd70d15c3d54c7764aeChris Manton                __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
68426f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski            memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
68526f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski            return BTA_GATT_OK;
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
68926f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    APPL_TRACE_ERROR("%s registration not found bd_addr:%02x:%02x:%02x:%02x:%02x:%02x",
69026f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski        __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
69126f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski    return BTA_GATT_ERROR;
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
694ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
695ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
696ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         BTA_GATTC_Refresh
697ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
698ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Refresh the server cache of the remote device
699ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
700ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters       remote_bda: remote device BD address.
701ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
702ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
703ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
704ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
705ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid BTA_GATTC_Refresh(BD_ADDR remote_bda)
706ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
7075fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_OPEN *p_buf =
7085fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_OPEN *)osi_malloc(sizeof(tBTA_GATTC_API_OPEN));
709ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
7105fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_REFRESH_EVT;
7115fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
712ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
7135fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
714ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
7155c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
7165c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach/*******************************************************************************
7175c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
7185c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Function         BTA_GATTC_Listen
7195c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
7205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Description      Start advertisement to listen for connection request for a GATT
7215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  client application.
7225c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
7235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Parameters       client_if: server interface.
7245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  start: to start or stop listening for connection
7255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  remote_bda: remote device BD address, if listen to all device
7265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                              use NULL.
7275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
7285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Returns          void
7295c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
7305c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach*******************************************************************************/
7315c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachvoid BTA_GATTC_Listen(tBTA_GATTC_IF client_if, BOOLEAN start, BD_ADDR_PTR target_bda)
7325c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
7335fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_LISTEN *p_buf =
7345fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_LISTEN *)osi_malloc(sizeof(tBTA_GATTC_API_LISTEN) + BD_ADDR_LEN);
7355fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
7365fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_LISTEN_EVT;
7375fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->client_if = client_if;
7385fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->start = start;
7395fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (target_bda) {
7405fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_buf->remote_bda = (UINT8*)(p_buf + 1);
7415fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        memcpy(p_buf->remote_bda, target_bda, BD_ADDR_LEN);
7425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    } else {
7435fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_buf->remote_bda = NULL;
7445c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    }
7455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
7465fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
7475c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
7485c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
749a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach/*******************************************************************************
750a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
751a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Function         BTA_GATTC_Broadcast
752a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
753a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Description      Start broadcasting (non-connectable advertisements)
754a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
755a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Parameters       client_if: client interface.
756a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**                  start: to start or stop listening for connection
757a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
758a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach** Returns          void
759a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach**
760a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach*******************************************************************************/
761a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbachvoid BTA_GATTC_Broadcast(tBTA_GATTC_IF client_if, BOOLEAN start)
762a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach{
7635fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_GATTC_API_LISTEN *p_buf =
7645fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_GATTC_API_LISTEN *)osi_malloc(sizeof(tBTA_GATTC_API_LISTEN) + BD_ADDR_LEN);
765a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach
7665fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->hdr.event = BTA_GATTC_API_BROADCAST_EVT;
7675fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->client_if = client_if;
7685fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_buf->start = start;
7695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
7705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_buf);
771a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach}
772a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */
774