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 server 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_gatts_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
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const tBTA_SYS_REG bta_gatts_reg =
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_gatts_hdl_event,
42e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    BTA_GATTS_Disable
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Function         BTA_GATTS_Disable
48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
49e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Description      This function is called to disable GATTS module
50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
51e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Parameters       None.
52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          None
54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
56e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachvoid BTA_GATTS_Disable(void)
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
58e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    BT_HDR  *p_buf;
59e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
60e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if (bta_sys_is_register(BTA_ID_GATTS) == FALSE)
61e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
62e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("GATTS Module not enabled/already disabled");
63e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        return;
64e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
65e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
66e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
67e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
68e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        p_buf->event = BTA_GATTS_API_DISABLE_EVT;
69e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        bta_sys_sendmsg(p_buf);
70e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
71e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    bta_sys_deregister(BTA_ID_GATTS);
72e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_AppRegister
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to register application callbacks
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                    with BTA GATTS module.
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       p_app_uuid - applicaiton UUID
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_cback - pointer to the application callback function.
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTS_CBACK *p_cback)
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_REG  *p_buf;
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* register with BTA system manager */
9382d0a118de082b95cc41b63de8fcd79c9f1f0831Sharvil Nanavati    if (bta_sys_is_register(BTA_ID_GATTS) == FALSE)
9482d0a118de082b95cc41b63de8fcd79c9f1f0831Sharvil Nanavati    {
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_register(BTA_ID_GATTS, &bta_gatts_reg);
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_REG *) GKI_getbuf(sizeof(tBTA_GATTS_API_REG))) != NULL)
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event    = BTA_GATTS_API_REG_EVT;
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_app_uuid != NULL)
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID));
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->p_cback      = p_cback;
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_AppDeregister
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      De-register with GATT Server.
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       app_id: applicatino ID.
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_AppDeregister(tBTA_GATTS_IF server_if)
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_DEREG  *p_buf;
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_DEREG *) GKI_getbuf(sizeof(tBTA_GATTS_API_DEREG))) != NULL)
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event    = BTA_GATTS_API_DEREG_EVT;
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->server_if    = server_if;
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_CreateService
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Create a service. When service creation is done, a callback
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  event BTA_GATTS_CREATE_SRVC_EVT is called to report status
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  and service ID to the profile. The service ID obtained in
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  the callback function needs to be used when adding included
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service and characteristics/descriptors into the service.
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       app_id: Profile ID this service is belonged to.
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_service_uuid: service UUID.
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  inst: instance ID number of this service.
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  num_handle: numble of handle requessted for this service.
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_primary: is this service a primary one or not.
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_CreateService(tBTA_GATTS_IF server_if, tBT_UUID *p_service_uuid, UINT8 inst,
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             UINT16 num_handle, BOOLEAN is_primary)
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_CREATE_SRVC  *p_buf;
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_CREATE_SRVC *) GKI_getbuf(sizeof(tBTA_GATTS_API_CREATE_SRVC))) != NULL)
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_CREATE_SRVC_EVT;
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->server_if = server_if;
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->inst = inst;
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&p_buf->service_uuid, p_service_uuid, sizeof(tBT_UUID));
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->num_handle = num_handle;
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_pri = is_primary;
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_AddIncludeService
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to add an included service. After included
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  service is included, a callback event BTA_GATTS_ADD_INCL_SRVC_EVT
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is reported the included service ID.
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       service_id: service ID to which this included service is to
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              be added.
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  included_service_id: the service ID to be included.
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_AddIncludeService(UINT16 service_id, UINT16 included_service_id)
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_ADD_INCL_SRVC  *p_buf;
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf =
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         (tBTA_GATTS_API_ADD_INCL_SRVC *) GKI_getbuf(sizeof(tBTA_GATTS_API_ADD_INCL_SRVC)))
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        != NULL)
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_ADD_INCL_SRVC_EVT;
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = service_id;
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->included_service_id = included_service_id;
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_AddCharacteristic
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to add a characteristic into a service.
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       service_id: service ID to which this included service is to
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              be added.
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_char_uuid : Characteristic UUID.
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  perm      : Characteristic value declaration attribute permission.
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  property  : Characteristic Properties
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_AddCharacteristic (UINT16 service_id,  tBT_UUID  *p_char_uuid,
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  tBTA_GATT_PERM perm, tBTA_GATT_CHAR_PROP property)
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_ADD_CHAR  *p_buf;
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_ADD_CHAR *) GKI_getbuf(sizeof(tBTA_GATTS_API_ADD_CHAR))) != NULL)
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, sizeof(tBTA_GATTS_API_ADD_CHAR));
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_ADD_CHAR_EVT;
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = service_id;
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->perm = perm;
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->property = property;
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_char_uuid)
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(&p_buf->char_uuid, p_char_uuid, sizeof(tBT_UUID));
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_AddCharDescriptor
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to add characteristic descriptor. When
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  it's done, a callback event BTA_GATTS_ADD_DESCR_EVT is called
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  to report the status and an ID number for this descriptor.
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       service_id: service ID to which this charatceristic descriptor is to
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                              be added.
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  perm: descriptor access permission.
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_descr_uuid: descriptor UUID.
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns status.
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_AddCharDescriptor (UINT16 service_id,
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  tBTA_GATT_PERM perm,
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                  tBT_UUID  * p_descr_uuid)
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_ADD_DESCR  *p_buf;
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  len = sizeof(tBTA_GATTS_API_ADD_DESCR);
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_ADD_DESCR *) GKI_getbuf(len)) != NULL)
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_ADD_DESCR_EVT;
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = service_id;
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->perm = perm;
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_descr_uuid)
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(&p_buf->descr_uuid, p_descr_uuid, sizeof(tBT_UUID));
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_DeleteService
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to delete a service. When this is done,
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  a callback event BTA_GATTS_DELETE_EVT is report with the status.
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       service_id: service_id to be deleted.
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          returns none.
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid  BTA_GATTS_DeleteService(UINT16 service_id)
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->event = BTA_GATTS_API_DEL_SRVC_EVT;
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->layer_specific = service_id;
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_StartService
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to start a service.
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       service_id: the service ID to be started.
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  sup_transport: supported trasnport.
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None.
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid  BTA_GATTS_StartService(UINT16 service_id, tBTA_GATT_TRANSPORT sup_transport)
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_START  *p_buf;
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_START *) GKI_getbuf(sizeof(tBTA_GATTS_API_START))) != NULL)
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_START_SRVC_EVT;
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = service_id;
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->transport = sup_transport;
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_StopService
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to stop a service.
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       service_id - service to be topped.
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_StopService(UINT16 service_id)
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->event = BTA_GATTS_API_STOP_SRVC_EVT;
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->layer_specific = service_id;
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_HandleValueIndication
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to read a characteristics descriptor.
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       bda - remote device bd address to indicate.
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**					attr_id - attribute ID to indicate.
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  data_len - indicate data length.
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_data: data to indicate.
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  need_confirm - if this indication expects a confirmation or not.
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_HandleValueIndication (UINT16 conn_id, UINT16 attr_id, UINT16 data_len,
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                      UINT8 *p_data, BOOLEAN need_confirm)
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_INDICATION  *p_buf;
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  len = sizeof(tBTA_GATTS_API_INDICATION);
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_INDICATION *) GKI_getbuf(len)) != NULL)
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_INDICATION_EVT;
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->attr_id = attr_id;
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->need_confirm = need_confirm;
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (data_len > 0 && p_data != NULL)
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->len = data_len;
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->value, p_data, data_len);
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_SendRsp
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to send a response to a request.
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id - connection identifier.
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  trans_id - transaction ID.
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  status - response status
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_msg - response data.
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_SendRsp (UINT16 conn_id, UINT32 trans_id,
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        tBTA_GATT_STATUS status, tBTA_GATTS_RSP *p_msg)
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_RSP  *p_buf;
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  len = sizeof(tBTA_GATTS_API_RSP) + sizeof(tBTA_GATTS_RSP);
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_RSP *) GKI_getbuf(len)) != NULL)
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(p_buf, 0, len);
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event    = BTA_GATTS_API_RSP_EVT;
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.layer_specific = conn_id;
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->trans_id = trans_id;
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->status = status;
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_msg != NULL)
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_buf->p_rsp = (tBTA_GATTS_RSP *)(p_buf + 1);
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p_buf->p_rsp, p_msg, sizeof(tBTA_GATTS_RSP));
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_Open
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Open a direct open connection or add a background auto connection
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       server_if: server interface.
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
4658fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta**                  transport : Transport on which GATT connection to be opened (BR/EDR or LE)
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4708fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Battavoid BTA_GATTS_Open(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, BOOLEAN is_direct,
4718fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta                    tBTA_GATT_TRANSPORT transport)
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_OPEN  *p_buf;
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_OPEN *) GKI_getbuf(sizeof(tBTA_GATTS_API_OPEN))) != NULL)
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_OPEN_EVT;
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->server_if = server_if;
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_direct = is_direct;
4808fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta        p_buf->transport = transport;
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_CancelOpen
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancel a direct open connection or remove a background auto connection
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  bd address
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       server_if: server interface.
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  remote_bda: remote device BD address.
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  is_direct: direct connection or background auto connection
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_CancelOpen(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, BOOLEAN is_direct)
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_GATTS_API_CANCEL_OPEN  *p_buf;
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (tBTA_GATTS_API_CANCEL_OPEN *) GKI_getbuf(sizeof(tBTA_GATTS_API_CANCEL_OPEN))) != NULL)
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->hdr.event = BTA_GATTS_API_CANCEL_OPEN_EVT;
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->server_if = server_if;
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->is_direct = is_direct;
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         BTA_GATTS_Close
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Close a connection  a remote device.
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       conn_id: connectino ID to be closed.
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid BTA_GATTS_Close(UINT16 conn_id)
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL)
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->event = BTA_GATTS_API_CLOSE_EVT;
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->layer_specific = conn_id;
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_buf);
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5425c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach/*******************************************************************************
5435c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
5445c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Function         BTA_GATTS_Listen
5455c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
5465c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Description      Start advertisement to listen for connection request for a
5475c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  GATT server
5485c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
5495c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Parameters       server_if: server interface.
5505c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  start: to start or stop listening for connection
5515c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                  remote_bda: remote device BD address, if listen to all device
5525c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**                              use NULL.
5535c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
5545c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Returns          void
5555c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
5565c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach*******************************************************************************/
5575c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachvoid BTA_GATTS_Listen(tBTA_GATTS_IF server_if, BOOLEAN start, BD_ADDR_PTR target_bda)
5585c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
5595c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    tBTA_GATTS_API_LISTEN  *p_buf;
5605c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
5615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    if ((p_buf = (tBTA_GATTS_API_LISTEN *) GKI_getbuf((UINT16)(sizeof(tBTA_GATTS_API_LISTEN) + BD_ADDR_LEN))) != NULL)
5625c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    {
5635c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        p_buf->hdr.event = BTA_GATTS_API_LISTEN_EVT;
5645c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
5655c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        p_buf->server_if    = server_if;
5665c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        p_buf->start        = start;
5675c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
5685c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        if (target_bda)
5695c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
5705c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            p_buf->remote_bda = (UINT8*)(p_buf + 1);
5715c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            memcpy(p_buf->remote_bda, target_bda, BD_ADDR_LEN);
5725c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
5735c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        else
5745c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            p_buf->remote_bda = NULL;
5755c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
5765c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        bta_sys_sendmsg(p_buf);
5775c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    }
5785c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    return;
5795c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */
582