blob: 4b88781787721964182210f16245b27e3c7123ba [file] [log] [blame]
The Android Open Source Project5738f832012-12-12 16:00:35 -08001/******************************************************************************
2 *
3 * Copyright (C) 2010-2012 Broadcom Corporation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18
19/******************************************************************************
20 *
21 * This is the implementation of the API for GATT module of BTA.
22 *
23 ******************************************************************************/
24
25#include "bt_target.h"
26
Marie Janssene9e58ce2016-06-17 14:12:17 -070027#if (BTA_GATT_INCLUDED == TRUE)
The Android Open Source Project5738f832012-12-12 16:00:35 -080028
29#include <string.h>
Pavlin Radoslavov258c2532015-09-27 20:59:05 -070030#include "bt_common.h"
The Android Open Source Project5738f832012-12-12 16:00:35 -080031#include "bta_sys.h"
32#include "bta_gatt_api.h"
33#include "bta_gattc_int.h"
34
35/*****************************************************************************
36** Constants
37*****************************************************************************/
38
Andre Eisenbache1202ca2013-05-15 04:55:08 -070039static const tBTA_SYS_REG bta_gattc_reg =
The Android Open Source Project5738f832012-12-12 16:00:35 -080040{
41 bta_gattc_hdl_event,
Andre Eisenbache1202ca2013-05-15 04:55:08 -070042 BTA_GATTC_Disable
The Android Open Source Project5738f832012-12-12 16:00:35 -080043};
44
Andre Eisenbache1202ca2013-05-15 04:55:08 -070045
The Android Open Source Project5738f832012-12-12 16:00:35 -080046/*******************************************************************************
47**
Andre Eisenbache1202ca2013-05-15 04:55:08 -070048** Function BTA_GATTC_Disable
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -080049**
Andre Eisenbache1202ca2013-05-15 04:55:08 -070050** Description This function is called to disable GATTC module
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -080051**
Andre Eisenbache1202ca2013-05-15 04:55:08 -070052** Parameters None.
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -080053**
54** Returns None
55**
56*******************************************************************************/
Andre Eisenbache1202ca2013-05-15 04:55:08 -070057void BTA_GATTC_Disable(void)
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -080058{
Marie Janssene9e58ce2016-06-17 14:12:17 -070059 if (bta_sys_is_register(BTA_ID_GATTC) == false)
Andre Eisenbache1202ca2013-05-15 04:55:08 -070060 {
Sharvil Nanavatie8c3d752014-05-04 10:12:26 -070061 APPL_TRACE_WARNING("GATTC Module not enabled/already disabled");
Andre Eisenbache1202ca2013-05-15 04:55:08 -070062 return;
63 }
Andre Eisenbache1202ca2013-05-15 04:55:08 -070064
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -080065 BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR));
66 p_buf->event = BTA_GATTC_API_DISABLE_EVT;
67
68 bta_sys_sendmsg(p_buf);
69 bta_sys_deregister(BTA_ID_GATTC);
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -080070}
71
72/*******************************************************************************
73**
The Android Open Source Project5738f832012-12-12 16:00:35 -080074** Function BTA_GATTC_AppRegister
75**
76** Description This function is called to register application callbacks
77** with BTA GATTC module.
78**
79** Parameters p_app_uuid - applicaiton UUID
80** p_client_cb - pointer to the application callback function.
81**
82** Returns None
83**
84*******************************************************************************/
85void BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb)
86{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -080087 tBTA_GATTC_API_REG *p_buf =
88 (tBTA_GATTC_API_REG *)osi_malloc(sizeof(tBTA_GATTC_API_REG));
The Android Open Source Project5738f832012-12-12 16:00:35 -080089
Marie Janssene9e58ce2016-06-17 14:12:17 -070090 if (bta_sys_is_register(BTA_ID_GATTC) == false)
Andre Eisenbache1202ca2013-05-15 04:55:08 -070091 bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg);
The Android Open Source Project5738f832012-12-12 16:00:35 -080092
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -080093 p_buf->hdr.event = BTA_GATTC_API_REG_EVT;
94 if (p_app_uuid != NULL)
95 memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID));
96 p_buf->p_cback = p_client_cb;
The Android Open Source Project5738f832012-12-12 16:00:35 -080097
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -080098 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -080099}
100
101/*******************************************************************************
102**
103** Function BTA_GATTC_AppDeregister
104**
105** Description This function is called to deregister an application
106** from BTA GATTC module.
107**
108** Parameters client_if - client interface identifier.
109**
110** Returns None
111**
112*******************************************************************************/
113void BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if)
114{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800115 tBTA_GATTC_API_DEREG *p_buf =
116 (tBTA_GATTC_API_DEREG *)osi_malloc(sizeof(tBTA_GATTC_API_DEREG));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800117
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800118 p_buf->hdr.event = BTA_GATTC_API_DEREG_EVT;
119 p_buf->client_if = client_if;
120
121 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800122}
123
124/*******************************************************************************
125**
126** Function BTA_GATTC_Open
127**
128** Description Open a direct connection or add a background auto connection
129** bd address
130**
131** Parameters client_if: server interface.
132** remote_bda: remote device BD address.
133** is_direct: direct connection or background auto connection
Ganesh Ganapathi Batta7fa4fba2014-04-16 16:50:09 -0700134** transport: Transport to be used for GATT connection (BREDR/LE)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800135**
136** Returns void
137**
138*******************************************************************************/
Ganesh Ganapathi Batta7fa4fba2014-04-16 16:50:09 -0700139void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda,
Marie Janssene9e58ce2016-06-17 14:12:17 -0700140 bool is_direct, tBTA_GATT_TRANSPORT transport)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800141{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800142 tBTA_GATTC_API_OPEN *p_buf =
143 (tBTA_GATTC_API_OPEN *) osi_malloc(sizeof(tBTA_GATTC_API_OPEN));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800144
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800145 p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT;
146 p_buf->client_if = client_if;
147 p_buf->is_direct = is_direct;
148 p_buf->transport = transport;
149 memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800150
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800151 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800152}
153
154/*******************************************************************************
155**
156** Function BTA_GATTC_CancelOpen
157**
158** Description Cancel a direct open connection or remove a background auto connection
159** bd address
160**
161** Parameters client_if: server interface.
162** remote_bda: remote device BD address.
163** is_direct: direct connection or background auto connection
164**
165** Returns void
166**
167*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700168void BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, bool is_direct)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800169{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800170 tBTA_GATTC_API_CANCEL_OPEN *p_buf =
171 (tBTA_GATTC_API_CANCEL_OPEN *)osi_malloc(sizeof(tBTA_GATTC_API_CANCEL_OPEN));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800172
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800173 p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT;
174 p_buf->client_if = client_if;
175 p_buf->is_direct = is_direct;
176 memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800177
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800178 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800179}
180
181/*******************************************************************************
182**
183** Function BTA_GATTC_Close
184**
185** Description Close a connection to a GATT server.
186**
187** Parameters conn_id: connectino ID to be closed.
188**
189** Returns void
190**
191*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700192void BTA_GATTC_Close(uint16_t conn_id)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800193{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800194 BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800195
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800196 p_buf->event = BTA_GATTC_API_CLOSE_EVT;
197 p_buf->layer_specific = conn_id;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800198
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800199 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800200}
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800201
The Android Open Source Project5738f832012-12-12 16:00:35 -0800202/*******************************************************************************
203**
Andre Eisenbach9426d532014-03-25 06:31:17 -0700204** Function BTA_GATTC_ConfigureMTU
205**
206** Description Configure the MTU size in the GATT channel. This can be done
207** only once per connection.
208**
209** Parameters conn_id: connection ID.
210** mtu: desired MTU size to use.
211**
212** Returns void
213**
214*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700215void BTA_GATTC_ConfigureMTU (uint16_t conn_id, uint16_t mtu)
Andre Eisenbach9426d532014-03-25 06:31:17 -0700216{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800217 tBTA_GATTC_API_CFG_MTU *p_buf =
218 (tBTA_GATTC_API_CFG_MTU *)osi_malloc(sizeof(tBTA_GATTC_API_CFG_MTU));
Andre Eisenbach9426d532014-03-25 06:31:17 -0700219
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800220 p_buf->hdr.event = BTA_GATTC_API_CFG_MTU_EVT;
221 p_buf->hdr.layer_specific = conn_id;
222 p_buf->mtu = mtu;
Andre Eisenbach9426d532014-03-25 06:31:17 -0700223
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800224 bta_sys_sendmsg(p_buf);
Andre Eisenbach9426d532014-03-25 06:31:17 -0700225}
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800226
Andre Eisenbach9426d532014-03-25 06:31:17 -0700227/*******************************************************************************
228**
The Android Open Source Project5738f832012-12-12 16:00:35 -0800229** Function BTA_GATTC_ServiceSearchRequest
230**
231** Description This function is called to request a GATT service discovery
232** on a GATT server. This function report service search result
233** by a callback event, and followed by a service search complete
234** event.
235**
236** Parameters conn_id: connection ID.
237** p_srvc_uuid: a UUID of the service application is interested in.
238** If Null, discover for all services.
239**
240** Returns None
241**
242*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700243void BTA_GATTC_ServiceSearchRequest (uint16_t conn_id, tBT_UUID *p_srvc_uuid)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800244{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800245 const size_t len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(tBT_UUID);
246 tBTA_GATTC_API_SEARCH *p_buf = (tBTA_GATTC_API_SEARCH *)osi_calloc(len);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800247
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800248 p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT;
249 p_buf->hdr.layer_specific = conn_id;
250 if (p_srvc_uuid) {
251 p_buf->p_srvc_uuid = (tBT_UUID *)(p_buf + 1);
252 memcpy(p_buf->p_srvc_uuid, p_srvc_uuid, sizeof(tBT_UUID));
253 } else {
254 p_buf->p_srvc_uuid = NULL;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800255 }
The Android Open Source Project5738f832012-12-12 16:00:35 -0800256
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800257 bta_sys_sendmsg(p_buf);
258}
The Android Open Source Project5738f832012-12-12 16:00:35 -0800259
260/*******************************************************************************
261**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700262** Function BTA_GATTC_GetServices
The Android Open Source Project5738f832012-12-12 16:00:35 -0800263**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700264** Description This function is called to find the services on the given server.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800265**
266** Parameters conn_id: connection ID which identify the server.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800267**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700268** Returns returns list_t of tBTA_GATTC_SERVICE or NULL.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800269**
270*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700271const list_t* BTA_GATTC_GetServices(uint16_t conn_id) {
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700272 return bta_gattc_get_services(conn_id);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800273}
274
275/*******************************************************************************
276**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700277** Function BTA_GATTC_GetCharacteristic
The Android Open Source Project5738f832012-12-12 16:00:35 -0800278**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700279** Description This function is called to find the characteristic on the given server.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800280**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700281** Parameters conn_id - connection ID which identify the server.
282** handle - characteristic handle
The Android Open Source Project5738f832012-12-12 16:00:35 -0800283**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700284** Returns returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800285**
286*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700287const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, uint16_t handle) {
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700288 return bta_gattc_get_characteristic(conn_id, handle);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800289}
The Android Open Source Project5738f832012-12-12 16:00:35 -0800290
291/*******************************************************************************
292**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700293** Function BTA_GATTC_GetDescriptor
The Android Open Source Project5738f832012-12-12 16:00:35 -0800294**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700295** Description This function is called to find the characteristic on the given server.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800296**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700297** Parameters conn_id - connection ID which identify the server.
298** handle - descriptor handle
The Android Open Source Project5738f832012-12-12 16:00:35 -0800299**
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700300** Returns returns pointer to tBTA_GATTC_DESCRIPTOR or NULL.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800301**
302*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700303const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, uint16_t handle) {
Jakub Pawlowski5204fd72016-03-15 15:35:00 -0700304 return bta_gattc_get_descriptor(conn_id, handle);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800305}
The Android Open Source Project5738f832012-12-12 16:00:35 -0800306
307/*******************************************************************************
308**
Jakub Pawlowski533fdbf2016-01-21 23:26:11 -0800309** Function BTA_GATTC_GetGattDb
310**
311** Description This function is called to get the GATT database.
312**
313** Parameters conn_id: connection ID which identify the server.
314** db: output parameter which will contain the GATT database copy.
315** Caller is responsible for freeing it.
316** count: number of elements in database.
317**
318*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700319void BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle,
Jakub Pawlowski9fd552b2016-02-10 15:26:14 -0800320 btgatt_db_element_t **db, int *count)
Jakub Pawlowski533fdbf2016-01-21 23:26:11 -0800321{
Jakub Pawlowski9fd552b2016-02-10 15:26:14 -0800322 bta_gattc_get_gatt_db(conn_id, start_handle, end_handle, db, count);
Jakub Pawlowski533fdbf2016-01-21 23:26:11 -0800323}
324
325/*******************************************************************************
326**
The Android Open Source Project5738f832012-12-12 16:00:35 -0800327** Function BTA_GATTC_ReadCharacteristic
328**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700329** Description This function is called to read a characteristics value
The Android Open Source Project5738f832012-12-12 16:00:35 -0800330**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700331** Parameters conn_id - connection ID.
332** handle - characteritic handle to read.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800333**
334** Returns None
335**
336*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700337void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_REQ auth_req)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800338{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800339 tBTA_GATTC_API_READ *p_buf =
340 (tBTA_GATTC_API_READ *)osi_calloc(sizeof(tBTA_GATTC_API_READ));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800341
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800342 p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
343 p_buf->hdr.layer_specific = conn_id;
344 p_buf->auth_req = auth_req;
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700345 p_buf->handle = handle;
346 p_buf->cmpl_evt = BTA_GATTC_READ_CHAR_EVT;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800347
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800348 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800349}
350
351/*******************************************************************************
352**
353** Function BTA_GATTC_ReadCharDescr
354**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700355** Description This function is called to read a descriptor value.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800356**
357** Parameters conn_id - connection ID.
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700358** handle - descriptor handle to read.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800359**
360** Returns None
361**
362*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700363void BTA_GATTC_ReadCharDescr (uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_REQ auth_req)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800364{
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700365 tBTA_GATTC_API_READ *p_buf =
366 (tBTA_GATTC_API_READ *)osi_calloc(sizeof(tBTA_GATTC_API_READ));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800367
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800368 p_buf->hdr.event = BTA_GATTC_API_READ_EVT;
369 p_buf->hdr.layer_specific = conn_id;
370 p_buf->auth_req = auth_req;
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700371 p_buf->handle = handle;
372 p_buf->cmpl_evt = BTA_GATTC_READ_DESCR_EVT;
Andre Eisenbach6975b4d2013-08-05 16:55:38 -0700373
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800374 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800375}
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800376
The Android Open Source Project5738f832012-12-12 16:00:35 -0800377/*******************************************************************************
378**
379** Function BTA_GATTC_ReadMultiple
380**
381** Description This function is called to read multiple characteristic or
382** characteristic descriptors.
383**
384** Parameters conn_id - connectino ID.
385** p_read_multi - pointer to the read multiple parameter.
386**
387** Returns None
388**
389*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700390void BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI *p_read_multi,
The Android Open Source Project5738f832012-12-12 16:00:35 -0800391 tBTA_GATT_AUTH_REQ auth_req)
392{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800393 tBTA_GATTC_API_READ_MULTI *p_buf =
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700394 (tBTA_GATTC_API_READ_MULTI *)osi_calloc(sizeof(tBTA_GATTC_API_READ_MULTI));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800395
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800396 p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT;
397 p_buf->hdr.layer_specific = conn_id;
398 p_buf->auth_req = auth_req;
399 p_buf->num_attr = p_read_multi->num_attr;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800400
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700401 if (p_buf->num_attr > 0)
Marie Janssene9e58ce2016-06-17 14:12:17 -0700402 memcpy(p_buf->handles, p_read_multi->handles, sizeof(uint16_t) * p_read_multi->num_attr);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800403
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800404 bta_sys_sendmsg(p_buf);
405}
The Android Open Source Project5738f832012-12-12 16:00:35 -0800406
407/*******************************************************************************
408**
409** Function BTA_GATTC_WriteCharValue
410**
411** Description This function is called to write characteristic value.
412**
413** Parameters conn_id - connection ID.
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700414** handle - characteristic handle to write.
415** write_type - type of write.
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700416** value - the value to be written.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800417**
418** Returns None
419**
420*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700421void BTA_GATTC_WriteCharValue ( uint16_t conn_id,
422 uint16_t handle,
The Android Open Source Project5738f832012-12-12 16:00:35 -0800423 tBTA_GATTC_WRITE_TYPE write_type,
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700424 std::vector<uint8_t> value,
The Android Open Source Project5738f832012-12-12 16:00:35 -0800425 tBTA_GATT_AUTH_REQ auth_req)
426{
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700427 tBTA_GATTC_API_WRITE *p_buf = (tBTA_GATTC_API_WRITE *)
428 osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + value.size());
The Android Open Source Project5738f832012-12-12 16:00:35 -0800429
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800430 p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
431 p_buf->hdr.layer_specific = conn_id;
432 p_buf->auth_req = auth_req;
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700433 p_buf->handle = handle;
434 p_buf->cmpl_evt = BTA_GATTC_WRITE_CHAR_EVT;
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800435 p_buf->write_type = write_type;
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700436 p_buf->len = value.size();
The Android Open Source Project5738f832012-12-12 16:00:35 -0800437
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700438 if (value.size() > 0) {
Marie Janssene9e58ce2016-06-17 14:12:17 -0700439 p_buf->p_value = (uint8_t *)(p_buf + 1);
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700440 memcpy(p_buf->p_value, value.data(), value.size());
The Android Open Source Project5738f832012-12-12 16:00:35 -0800441 }
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800442
443 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800444}
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800445
The Android Open Source Project5738f832012-12-12 16:00:35 -0800446/*******************************************************************************
447**
448** Function BTA_GATTC_WriteCharDescr
449**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700450** Description This function is called to write descriptor value.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800451**
452** Parameters conn_id - connection ID
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700453** handle - descriptor hadle to write.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800454** write_type - write type.
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700455** value - the value to be written.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800456**
457** Returns None
458**
459*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700460void BTA_GATTC_WriteCharDescr (uint16_t conn_id,
461 uint16_t handle,
The Android Open Source Project5738f832012-12-12 16:00:35 -0800462 tBTA_GATTC_WRITE_TYPE write_type,
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700463 std::vector<uint8_t> value,
The Android Open Source Project5738f832012-12-12 16:00:35 -0800464 tBTA_GATT_AUTH_REQ auth_req)
465{
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700466 tBTA_GATTC_API_WRITE *p_buf = (tBTA_GATTC_API_WRITE *)
467 osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + value.size());
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800468
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800469 p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
470 p_buf->hdr.layer_specific = conn_id;
471 p_buf->auth_req = auth_req;
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700472 p_buf->handle = handle;
473 p_buf->cmpl_evt = BTA_GATTC_WRITE_DESCR_EVT;
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800474 p_buf->write_type = write_type;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800475
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700476 if (value.size() != 0) {
Marie Janssene9e58ce2016-06-17 14:12:17 -0700477 p_buf->p_value = (uint8_t *)(p_buf + 1);
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700478 p_buf->len = value.size();
479 memcpy(p_buf->p_value, value.data(), value.size());
The Android Open Source Project5738f832012-12-12 16:00:35 -0800480 }
The Android Open Source Project5738f832012-12-12 16:00:35 -0800481
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800482 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800483}
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800484
The Android Open Source Project5738f832012-12-12 16:00:35 -0800485/*******************************************************************************
486**
487** Function BTA_GATTC_PrepareWrite
488**
489** Description This function is called to prepare write a characteristic value.
490**
491** Parameters conn_id - connection ID.
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700492** p_char_id - GATT characteritic ID of the service.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800493** offset - offset of the write value.
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700494** value - the value to be written.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800495**
496** Returns None
497**
498*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700499void BTA_GATTC_PrepareWrite (uint16_t conn_id, uint16_t handle,
500 uint16_t offset, std::vector<uint8_t> value,
The Android Open Source Project5738f832012-12-12 16:00:35 -0800501 tBTA_GATT_AUTH_REQ auth_req)
502{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800503 tBTA_GATTC_API_WRITE *p_buf =
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700504 (tBTA_GATTC_API_WRITE *)osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + value.size());
The Android Open Source Project5738f832012-12-12 16:00:35 -0800505
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800506 p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT;
507 p_buf->hdr.layer_specific = conn_id;
508 p_buf->auth_req = auth_req;
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700509 p_buf->handle = handle;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800510
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800511 p_buf->write_type = BTA_GATTC_WRITE_PREPARE;
512 p_buf->offset = offset;
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700513 p_buf->len = value.size();
The Android Open Source Project5738f832012-12-12 16:00:35 -0800514
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700515 if (value.size() > 0) {
Marie Janssene9e58ce2016-06-17 14:12:17 -0700516 p_buf->p_value = (uint8_t *)(p_buf + 1);
Jakub Pawlowski26ecec02016-05-27 09:42:21 -0700517 memcpy(p_buf->p_value, value.data(), value.size());
The Android Open Source Project5738f832012-12-12 16:00:35 -0800518 }
The Android Open Source Project5738f832012-12-12 16:00:35 -0800519
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800520 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800521}
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800522
The Android Open Source Project5738f832012-12-12 16:00:35 -0800523/*******************************************************************************
524**
525** Function BTA_GATTC_ExecuteWrite
526**
527** Description This function is called to execute write a prepare write sequence.
528**
529** Parameters conn_id - connection ID.
530** is_execute - execute or cancel.
531**
532** Returns None
533**
534*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700535void BTA_GATTC_ExecuteWrite (uint16_t conn_id, bool is_execute)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800536{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800537 tBTA_GATTC_API_EXEC *p_buf =
538 (tBTA_GATTC_API_EXEC *)osi_calloc(sizeof(tBTA_GATTC_API_EXEC));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800539
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800540 p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT;
541 p_buf->hdr.layer_specific = conn_id;
542 p_buf->is_execute = is_execute;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800543
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800544 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800545}
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800546
The Android Open Source Project5738f832012-12-12 16:00:35 -0800547/*******************************************************************************
548**
549** Function BTA_GATTC_SendIndConfirm
550**
551** Description This function is called to send handle value confirmation.
552**
553** Parameters conn_id - connection ID.
554** p_char_id - characteristic ID to confirm.
555**
556** Returns None
557**
558*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700559void BTA_GATTC_SendIndConfirm (uint16_t conn_id, uint16_t handle)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800560{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800561 tBTA_GATTC_API_CONFIRM *p_buf =
562 (tBTA_GATTC_API_CONFIRM *)osi_calloc(sizeof(tBTA_GATTC_API_CONFIRM));
The Android Open Source Project5738f832012-12-12 16:00:35 -0800563
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700564 APPL_TRACE_API("%s conn_id=%d handle=0x%04x", __func__, conn_id, handle);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800565
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800566 p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT;
567 p_buf->hdr.layer_specific = conn_id;
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700568 p_buf->handle = handle;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800569
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800570 bta_sys_sendmsg(p_buf);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800571}
572
573/*******************************************************************************
574**
575** Function BTA_GATTC_RegisterForNotifications
576**
577** Description This function is called to register for notification of a service.
578**
579** Parameters client_if - client interface.
580** bda - target GATT server.
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700581** handle - GATT characteristic handle.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800582**
583** Returns OK if registration succeed, otherwise failed.
584**
585*******************************************************************************/
586tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF client_if,
Marie Janssene9e58ce2016-06-17 14:12:17 -0700587 const BD_ADDR bda, uint16_t handle)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800588{
589 tBTA_GATTC_RCB *p_clreg;
590 tBTA_GATT_STATUS status = BTA_GATT_ILLEGAL_PARAMETER;
Marie Janssene9e58ce2016-06-17 14:12:17 -0700591 uint8_t i;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800592
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700593 if (!handle)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800594 {
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700595 APPL_TRACE_ERROR("deregistration failed, handle is 0");
The Android Open Source Project5738f832012-12-12 16:00:35 -0800596 return status;
597 }
598
The Android Open Source Project5738f832012-12-12 16:00:35 -0800599 if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL)
600 {
601 for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
602 {
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800603 if ( p_clreg->notif_reg[i].in_use &&
604 !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700605 p_clreg->notif_reg[i].handle == handle)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800606 {
Sharvil Nanavatie8c3d752014-05-04 10:12:26 -0700607 APPL_TRACE_WARNING("notification already registered");
The Android Open Source Project5738f832012-12-12 16:00:35 -0800608 status = BTA_GATT_OK;
609 break;
610 }
611 }
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800612 if (status != BTA_GATT_OK)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800613 {
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800614 for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++)
615 {
616 if (!p_clreg->notif_reg[i].in_use)
617 {
618 memset((void *)&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
619
Marie Janssene9e58ce2016-06-17 14:12:17 -0700620 p_clreg->notif_reg[i].in_use = true;
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800621 memcpy(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN);
622
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700623 p_clreg->notif_reg[i].handle = handle;
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800624 status = BTA_GATT_OK;
625 break;
626 }
627 }
628 if (i == BTA_GATTC_NOTIF_REG_MAX)
629 {
630 status = BTA_GATT_NO_RESOURCES;
Sharvil Nanavatie8c3d752014-05-04 10:12:26 -0700631 APPL_TRACE_ERROR("Max Notification Reached, registration failed.");
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800632 }
The Android Open Source Project5738f832012-12-12 16:00:35 -0800633 }
634 }
635 else
636 {
Sharvil Nanavatie8c3d752014-05-04 10:12:26 -0700637 APPL_TRACE_ERROR("Client_if: %d Not Registered", client_if);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800638 }
639
The Android Open Source Project5738f832012-12-12 16:00:35 -0800640 return status;
641}
642
643/*******************************************************************************
644**
645** Function BTA_GATTC_DeregisterForNotifications
646**
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700647** Description This function is called to de-register for notification of a servbice.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800648**
649** Parameters client_if - client interface.
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700650** remote_bda - target GATT server.
651** handle - GATT characteristic handle.
The Android Open Source Project5738f832012-12-12 16:00:35 -0800652**
653** Returns OK if deregistration succeed, otherwise failed.
654**
655*******************************************************************************/
656tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF client_if,
Marie Janssene9e58ce2016-06-17 14:12:17 -0700657 const BD_ADDR bda, uint16_t handle)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800658{
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700659 if (!handle) {
660 APPL_TRACE_ERROR("%s: deregistration failed, handle is 0", __func__);
661 return BTA_GATT_ILLEGAL_PARAMETER;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800662 }
663
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700664 tBTA_GATTC_RCB *p_clreg = bta_gattc_cl_get_regcb(client_if);
665 if (p_clreg == NULL) {
Chris Mantonf8027002015-03-12 09:22:48 -0700666 APPL_TRACE_ERROR("%s client_if: %d not registered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x",
667 __func__, client_if, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700668 return BTA_GATT_ILLEGAL_PARAMETER;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800669 }
670
Jakub Pawlowski9dc99852016-03-17 12:05:54 -0700671 for (int i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++) {
672 if (p_clreg->notif_reg[i].in_use &&
673 !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) &&
674 p_clreg->notif_reg[i].handle == handle) {
675 APPL_TRACE_DEBUG("%s deregistered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x",
676 __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
677 memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
678 return BTA_GATT_OK;
679 }
680 }
681
682 APPL_TRACE_ERROR("%s registration not found bd_addr:%02x:%02x:%02x:%02x:%02x:%02x",
683 __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
684 return BTA_GATT_ERROR;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800685}
686
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800687/*******************************************************************************
688**
689** Function BTA_GATTC_Refresh
690**
691** Description Refresh the server cache of the remote device
692**
693** Parameters remote_bda: remote device BD address.
694**
695** Returns void
696**
697*******************************************************************************/
Jakub Pawlowski063ca022016-04-25 10:43:02 -0700698void BTA_GATTC_Refresh(const BD_ADDR remote_bda)
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800699{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800700 tBTA_GATTC_API_OPEN *p_buf =
701 (tBTA_GATTC_API_OPEN *)osi_malloc(sizeof(tBTA_GATTC_API_OPEN));
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800702
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800703 p_buf->hdr.event = BTA_GATTC_API_REFRESH_EVT;
704 memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800705
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800706 bta_sys_sendmsg(p_buf);
Ganesh Ganapathi Battaead3cde2013-02-05 15:22:31 -0800707}
Andre Eisenbach5c44e452013-08-06 18:19:37 -0700708
709/*******************************************************************************
710**
711** Function BTA_GATTC_Listen
712**
713** Description Start advertisement to listen for connection request for a GATT
714** client application.
715**
716** Parameters client_if: server interface.
717** start: to start or stop listening for connection
718** remote_bda: remote device BD address, if listen to all device
719** use NULL.
720**
721** Returns void
722**
723*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700724void BTA_GATTC_Listen(tBTA_GATTC_IF client_if, bool start, BD_ADDR_PTR target_bda)
Andre Eisenbach5c44e452013-08-06 18:19:37 -0700725{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800726 tBTA_GATTC_API_LISTEN *p_buf =
727 (tBTA_GATTC_API_LISTEN *)osi_malloc(sizeof(tBTA_GATTC_API_LISTEN) + BD_ADDR_LEN);
Andre Eisenbach5c44e452013-08-06 18:19:37 -0700728
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800729 p_buf->hdr.event = BTA_GATTC_API_LISTEN_EVT;
730 p_buf->client_if = client_if;
731 p_buf->start = start;
732 if (target_bda) {
Marie Janssene9e58ce2016-06-17 14:12:17 -0700733 p_buf->remote_bda = (uint8_t*)(p_buf + 1);
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800734 memcpy(p_buf->remote_bda, target_bda, BD_ADDR_LEN);
735 } else {
736 p_buf->remote_bda = NULL;
Andre Eisenbach5c44e452013-08-06 18:19:37 -0700737 }
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800738
739 bta_sys_sendmsg(p_buf);
Andre Eisenbach5c44e452013-08-06 18:19:37 -0700740}
741
Andre Eisenbacha4611ac2014-03-05 15:41:53 -0800742/*******************************************************************************
743**
744** Function BTA_GATTC_Broadcast
745**
746** Description Start broadcasting (non-connectable advertisements)
747**
748** Parameters client_if: client interface.
749** start: to start or stop listening for connection
750**
751** Returns void
752**
753*******************************************************************************/
Marie Janssene9e58ce2016-06-17 14:12:17 -0700754void BTA_GATTC_Broadcast(tBTA_GATTC_IF client_if, bool start)
Andre Eisenbacha4611ac2014-03-05 15:41:53 -0800755{
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800756 tBTA_GATTC_API_LISTEN *p_buf =
757 (tBTA_GATTC_API_LISTEN *)osi_malloc(sizeof(tBTA_GATTC_API_LISTEN) + BD_ADDR_LEN);
Andre Eisenbacha4611ac2014-03-05 15:41:53 -0800758
Pavlin Radoslavov717a4a92016-02-06 08:36:06 -0800759 p_buf->hdr.event = BTA_GATTC_API_BROADCAST_EVT;
760 p_buf->client_if = client_if;
761 p_buf->start = start;
762
763 bta_sys_sendmsg(p_buf);
Andre Eisenbacha4611ac2014-03-05 15:41:53 -0800764}
765
The Android Open Source Project5738f832012-12-12 16:00:35 -0800766#endif /* BTA_GATT_INCLUDED */