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