blob: b9d678d36f2f6c411ce9171b42e2b64771f69678 [file] [log] [blame]
The Android Open Source Project5738f832012-12-12 16:00:35 -08001/******************************************************************************
2 *
3 * Copyright (C) 2003-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 * Routes connection status callbacks from various sub systems to DM
22 *
23 ******************************************************************************/
24
Scott James Remnant933926c2015-04-02 15:22:14 -070025#include <stddef.h>
The Android Open Source Project5738f832012-12-12 16:00:35 -080026#include "bta_api.h"
27#include "bta_sys.h"
28#include "bta_sys_int.h"
Pavlin Radoslavov258c2532015-09-27 20:59:05 -070029#include "bt_common.h"
Mike J. Chen5cd8bff2014-01-31 18:16:59 -080030#include "utl.h"
The Android Open Source Project5738f832012-12-12 16:00:35 -080031
32/*******************************************************************************
33**
34** Function bta_sys_rm_register
35**
36** Description Called by BTA DM to register role management callbacks
37**
38**
39** Returns void
40**
41*******************************************************************************/
42void bta_sys_rm_register(tBTA_SYS_CONN_CBACK * p_cback)
43{
44 bta_sys_cb.prm_cb = p_cback;
45}
46
47
48/*******************************************************************************
49**
50** Function bta_sys_policy_register
51**
52** Description Called by BTA DM to register link policy change callbacks
53**
54**
55** Returns void
56**
57*******************************************************************************/
58void bta_sys_policy_register(tBTA_SYS_CONN_CBACK * p_cback)
59{
60 bta_sys_cb.p_policy_cb = p_cback;
61}
62
63/*******************************************************************************
64**
65** Function bta_sys_role_chg_register
66**
67** Description Called by BTA AV to register role change callbacks
68**
69**
70** Returns void
71**
72*******************************************************************************/
73void bta_sys_role_chg_register(tBTA_SYS_CONN_CBACK * p_cback)
74{
75 bta_sys_cb.p_role_cb = p_cback;
76}
77/*******************************************************************************
78**
79** Function bta_sys_ssr_cfg_register
80**
81** Description Called by BTA DM to register SSR configuration callback
82**
83**
84** Returns void
85**
86*******************************************************************************/
87#if (BTM_SSR_INCLUDED == TRUE)
88void bta_sys_ssr_cfg_register(tBTA_SYS_SSR_CFG_CBACK * p_cback)
89{
90 bta_sys_cb.p_ssr_cb = p_cback;
91}
92#endif
93/*******************************************************************************
94**
95** Function bta_sys_role_chg_register
96**
97** Description Called by BTA AV to register role change callbacks
98**
99**
100** Returns void
101**
102*******************************************************************************/
103void bta_sys_notify_role_chg(BD_ADDR_PTR p_bda, UINT8 new_role, UINT8 hci_status)
104{
105 if (bta_sys_cb.p_role_cb)
106 {
107 bta_sys_cb.p_role_cb(BTA_SYS_ROLE_CHANGE, new_role, hci_status, p_bda);
108 }
109}
110
111/*******************************************************************************
112**
113** Function bta_sys_collision_register
114**
115** Description Called by any BTA module to register for collision event.
116**
117**
118** Returns void
119**
120*******************************************************************************/
121void bta_sys_collision_register(UINT8 bta_id, tBTA_SYS_CONN_CBACK *p_cback)
122{
123 UINT8 index;
124
125 for (index = 0; index < MAX_COLLISION_REG; index++)
126 {
127 if ((bta_sys_cb.colli_reg.id[index] == bta_id) ||
128 (bta_sys_cb.colli_reg.id[index] == 0))
129 {
130 bta_sys_cb.colli_reg.id[index] = bta_id;
131 bta_sys_cb.colli_reg.p_coll_cback[index] = p_cback;
132 return;
133 }
134 }
135}
136
137/*******************************************************************************
138**
139** Function bta_sys_notify_collision
140**
141** Description Called by BTA DM to notify collision event.
142**
143**
144** Returns void
145**
146*******************************************************************************/
147void bta_sys_notify_collision (BD_ADDR_PTR p_bda)
148{
149 UINT8 index;
150
151 for (index = 0; index < MAX_COLLISION_REG; index++)
152 {
153 if ((bta_sys_cb.colli_reg.id[index] != 0) &&
154 (bta_sys_cb.colli_reg.p_coll_cback[index] != NULL))
155 {
156 bta_sys_cb.colli_reg.p_coll_cback[index] (0, BTA_ID_SYS, 0, p_bda);
157 }
158 }
159}
160
161/*******************************************************************************
162**
163** Function bta_sys_sco_register
164**
165** Description Called by BTA AV to register sco connection change callbacks
166**
167**
168** Returns void
169**
170*******************************************************************************/
171void bta_sys_sco_register(tBTA_SYS_CONN_CBACK * p_cback)
172{
173 bta_sys_cb.p_sco_cb = p_cback;
174}
175
176/*******************************************************************************
177**
178** Function bta_sys_pm_register
179**
180** Description Called by BTA DM to register power management callbacks
181**
182**
183** Returns void
184**
185*******************************************************************************/
186void bta_sys_pm_register(tBTA_SYS_CONN_CBACK * p_cback)
187{
188 bta_sys_cb.ppm_cb = p_cback;
189}
190
191/*******************************************************************************
192**
193** Function bta_sys_conn_open
194**
195** Description Called by BTA subsystems when a connection is made to
196** the service
197**
198**
199** Returns void
200**
201*******************************************************************************/
202void bta_sys_conn_open(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
203{
204 if(bta_sys_cb.prm_cb)
205 {
206
207 bta_sys_cb.prm_cb(BTA_SYS_CONN_OPEN, id, app_id, peer_addr);
208
209 }
210
211 if(bta_sys_cb.ppm_cb)
212 {
213
214 bta_sys_cb.ppm_cb(BTA_SYS_CONN_OPEN, id, app_id, peer_addr);
215
216 }
217}
218
219
220
221/*******************************************************************************
222**
223** Function bta_sys_conn_close
224**
225** Description Called by BTA subsystems when a connection to the service
226** is closed
227**
228**
229** Returns void
230**
231*******************************************************************************/
232void bta_sys_conn_close(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
233{
234 if(bta_sys_cb.prm_cb)
235 {
236
237 bta_sys_cb.prm_cb(BTA_SYS_CONN_CLOSE, id, app_id, peer_addr);
238
239 }
240
241 if(bta_sys_cb.ppm_cb)
242 {
243
244 bta_sys_cb.ppm_cb(BTA_SYS_CONN_CLOSE, id, app_id, peer_addr);
245
246 }
247}
248
249
250/*******************************************************************************
251**
252** Function bta_sys_app_open
253**
254** Description Called by BTA subsystems when application initiates connection
255** to a peer device
256**
257**
258** Returns void
259**
260*******************************************************************************/
261void bta_sys_app_open(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
262{
263 if(bta_sys_cb.ppm_cb)
264 {
265 bta_sys_cb.ppm_cb(BTA_SYS_APP_OPEN, id, app_id, peer_addr);
266 }
267}
268
269
270
271/*******************************************************************************
272**
273** Function bta_sys_app_close
274**
275** Description Called by BTA subsystems when application initiates close
276** of connection to peer device
277**
278** Returns void
279**
280*******************************************************************************/
281void bta_sys_app_close(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
282{
283 if(bta_sys_cb.ppm_cb)
284 {
285 bta_sys_cb.ppm_cb(BTA_SYS_APP_CLOSE, id, app_id, peer_addr);
286 }
287}
288
289
290/*******************************************************************************
291**
292** Function bta_sys_sco_open
293**
294** Description Called by BTA subsystems when sco connection for that service
295** is open
296**
297** Returns void
298**
299*******************************************************************************/
300void bta_sys_sco_open(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
301{
302 /* AG triggers p_sco_cb by bta_sys_sco_use. */
303 if((id != BTA_ID_AG) && (bta_sys_cb.p_sco_cb))
304 {
305 /* without querying BTM_GetNumScoLinks() */
306 bta_sys_cb.p_sco_cb(BTA_SYS_SCO_OPEN, 1, app_id, peer_addr);
307 }
308
309 if(bta_sys_cb.ppm_cb)
310 {
311 bta_sys_cb.ppm_cb(BTA_SYS_SCO_OPEN, id, app_id, peer_addr);
312 }
313}
314
315/*******************************************************************************
316**
317** Function bta_sys_sco_close
318**
319** Description Called by BTA subsystems when sco connection for that service
320** is closed
321**
322** Returns void
323**
324*******************************************************************************/
325void bta_sys_sco_close(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
326{
327 UINT8 num_sco_links;
328
329 if((id != BTA_ID_AG) && (bta_sys_cb.p_sco_cb))
330 {
331 num_sco_links = BTM_GetNumScoLinks();
332 bta_sys_cb.p_sco_cb(BTA_SYS_SCO_CLOSE, num_sco_links, app_id, peer_addr);
333 }
334
335 if(bta_sys_cb.ppm_cb)
336 {
337 bta_sys_cb.ppm_cb(BTA_SYS_SCO_CLOSE, id, app_id, peer_addr);
338 }
339}
340
341/*******************************************************************************
342**
343** Function bta_sys_sco_use
344**
345** Description Called by BTA subsystems when that service needs to use sco.
346**
347**
348** Returns void
349**
350*******************************************************************************/
351void bta_sys_sco_use(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
352{
Mike J. Chen5cd8bff2014-01-31 18:16:59 -0800353 UNUSED(id);
354
The Android Open Source Project5738f832012-12-12 16:00:35 -0800355 /* AV streaming need to be suspended before SCO is connected. */
356 if(bta_sys_cb.p_sco_cb)
357 {
358 /* without querying BTM_GetNumScoLinks() */
359 bta_sys_cb.p_sco_cb(BTA_SYS_SCO_OPEN, 1, app_id, peer_addr);
360 }
361}
362
363/*******************************************************************************
364**
365** Function bta_sys_sco_unuse
366**
367** Description Called by BTA subsystems when sco connection for that service
368** is no longer needed.
369**
370** Returns void
371**
372*******************************************************************************/
373void bta_sys_sco_unuse(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
374{
375 UINT8 num_sco_links;
Mike J. Chen5cd8bff2014-01-31 18:16:59 -0800376 UNUSED(id);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800377
378 if((bta_sys_cb.p_sco_cb))
379 {
380 num_sco_links = BTM_GetNumScoLinks();
381 bta_sys_cb.p_sco_cb(BTA_SYS_SCO_CLOSE, num_sco_links, app_id, peer_addr);
382 }
383}
384/*******************************************************************************
385**
386** Function bta_sys_chg_ssr_config
387**
388** Description Called by BTA subsystems to indicate that the given app SSR setting
389** need to be changed.
390**
391** Returns void
392**
393*******************************************************************************/
394#if (BTM_SSR_INCLUDED == TRUE)
395void bta_sys_chg_ssr_config (UINT8 id, UINT8 app_id, UINT16 max_latency, UINT16 min_tout)
396{
397 if(bta_sys_cb.p_ssr_cb)
398 {
399 bta_sys_cb.p_ssr_cb(id, app_id, max_latency, min_tout);
400 }
401}
402#endif
403/*******************************************************************************
404**
405** Function bta_sys_set_policy
406**
407** Description Called by BTA subsystems to indicate that the given link
408** policy to peer device should be set
409**
410** Returns void
411**
412*******************************************************************************/
413void bta_sys_set_policy (UINT8 id, UINT8 policy, BD_ADDR peer_addr)
414{
415 if(bta_sys_cb.p_policy_cb)
416 {
417 bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_SET, id, policy, peer_addr);
418 }
419}
420
421/*******************************************************************************
422**
423** Function bta_sys_clear_policy
424**
425** Description Called by BTA subsystems to indicate that the given link
426** policy to peer device should be clear
427**
428** Returns void
429**
430*******************************************************************************/
431void bta_sys_clear_policy (UINT8 id, UINT8 policy, BD_ADDR peer_addr)
432{
433 if(bta_sys_cb.p_policy_cb)
434 {
435 bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_CLR, id, policy, peer_addr);
436 }
437}
438
439/*******************************************************************************
440**
441** Function bta_sys_set_default_policy
442**
443** Description Called by BTA subsystems to indicate that the given default
444** link policy should be set
445**
446** Returns void
447**
448*******************************************************************************/
449void bta_sys_set_default_policy (UINT8 id, UINT8 policy)
450{
451 if(bta_sys_cb.p_policy_cb)
452 {
453 bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_DEF_SET, id, policy, NULL);
454 }
455}
456
457/*******************************************************************************
458**
459** Function bta_sys_clear_default_policy
460**
461** Description Called by BTA subsystems to indicate that the given default
462** link policy should be clear
463**
464** Returns void
465**
466*******************************************************************************/
467void bta_sys_clear_default_policy (UINT8 id, UINT8 policy)
468{
469 if(bta_sys_cb.p_policy_cb)
470 {
471 bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_DEF_CLR, id, policy, NULL);
472 }
473}
474
475/*******************************************************************************
476**
477** Function bta_sys_idle
478**
479** Description Called by BTA subsystems to indicate that the connection to
480** peer device is idle
481**
482** Returns void
483**
484*******************************************************************************/
485void bta_sys_idle(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
486{
487
488 if(bta_sys_cb.prm_cb)
489 {
490
491 bta_sys_cb.prm_cb(BTA_SYS_CONN_IDLE, id, app_id, peer_addr);
492
493 }
494
495 if(bta_sys_cb.ppm_cb)
496 {
497
498 bta_sys_cb.ppm_cb(BTA_SYS_CONN_IDLE, id, app_id, peer_addr);
499 }
500}
501
502/*******************************************************************************
503**
504** Function bta_sys_busy
505**
506** Description Called by BTA subsystems to indicate that the connection to
507** peer device is busy
508**
509** Returns void
510**
511*******************************************************************************/
512void bta_sys_busy(UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
513{
514 if(bta_sys_cb.prm_cb)
515 {
516
517 bta_sys_cb.prm_cb(BTA_SYS_CONN_BUSY, id, app_id, peer_addr);
518
519 }
520
521 if(bta_sys_cb.ppm_cb)
522 {
523
524 bta_sys_cb.ppm_cb(BTA_SYS_CONN_BUSY, id, app_id, peer_addr);
525
526 }
527}
528
Chris Manton1e61ce12014-10-24 09:12:41 -0700529#if (BTA_EIR_CANNED_UUID_LIST != TRUE)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800530/*******************************************************************************
531**
532** Function bta_sys_eir_register
533**
534** Description Called by BTA DM to register EIR utility function that can be
535** used by the other BTA modules to add/remove UUID.
536**
537** Returns void
538**
539*******************************************************************************/
540void bta_sys_eir_register(tBTA_SYS_EIR_CBACK * p_cback)
541{
542 bta_sys_cb.eir_cb = p_cback;
543}
544
545/*******************************************************************************
546**
547** Function bta_sys_add_uuid
548**
549** Description Called by BTA subsystems to indicate to DM that new service
550** class UUID is added.
551**
552** Returns void
553**
554*******************************************************************************/
555void bta_sys_add_uuid(UINT16 uuid16)
556{
557 if(bta_sys_cb.eir_cb)
558 {
559 bta_sys_cb.eir_cb(uuid16, TRUE );
560 }
561}
562
563/*******************************************************************************
564**
565** Function bta_sys_remove_uuid
566**
567** Description Called by BTA subsystems to indicate to DM that the service
568** class UUID is removed.
569**
570** Returns void
571**
572*******************************************************************************/
573void bta_sys_remove_uuid(UINT16 uuid16)
574{
575 if(bta_sys_cb.eir_cb)
576 {
577 bta_sys_cb.eir_cb(uuid16, FALSE);
578 }
579}
580#endif
581
Andre Eisenbachb203d472013-11-20 17:23:06 -0800582/*******************************************************************************
583**
584** Function bta_sys_vs_hdl
585**
586** Description Called by BTA subsystems to execute a VS event handler function
587**
588** Returns void
589**
590*******************************************************************************/
591BOOLEAN bta_sys_vs_hdl(UINT16 evt, void *p)
592{
593 if (bta_sys_cb.p_vs_evt_hdlr)
594 return (*bta_sys_cb.p_vs_evt_hdlr)(evt, p);
595
596 return FALSE;
597}
598