1 /******************************************************************************
2  *
3  *  Copyright 1998-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 private file for the message access equipment (MSE)
22  *  subsystem.
23  *
24  ******************************************************************************/
25 #ifndef BTA_HL_INT_H
26 #define BTA_HL_INT_H
27 
28 #include "bt_target.h"
29 #include "bta_hl_api.h"
30 #include "bta_hl_co.h"
31 #include "bta_sys.h"
32 #include "l2cdefs.h"
33 
34 typedef uint16_t(tBTA_HL_ALLOCATE_PSM)(void);
35 
36 /*****************************************************************************
37  *  Constants and data types
38  ****************************************************************************/
39 
40 #ifndef BTA_HL_DISC_SIZE
41 #define BTA_HL_DISC_SIZE 1600
42 #endif
43 #define BTA_HL_NUM_SRCH_ATTR 10
44 #define BTA_HL_MIN_SDP_MDEP_LEN 7
45 
46 /* L2CAP defualt parameters */
47 #define BTA_HL_L2C_TX_WIN_SIZE 10
48 #define BTA_HL_L2C_MAX_TRANSMIT 32
49 #define BTA_HL_L2C_RTRANS_TOUT 2000
50 #define BTA_HL_L2C_MON_TOUT 12000
51 #define BTA_HL_L2C_MPS 1017
52 
53 /* L2CAP FCS setting*/
54 #define BTA_HL_MCA_USE_FCS MCA_FCS_USE
55 #define BTA_HL_MCA_NO_FCS MCA_FCS_BYPASS
56 #define BTA_HL_L2C_USE_FCS 1
57 #define BTA_HL_L2C_NO_FCS 0
58 #define BTA_HL_DEFAULT_SOURCE_FCS BTA_HL_L2C_USE_FCS
59 #define BTA_HL_MCA_FCS_USE_MASK MCA_FCS_USE_MASK
60 
61 /* SDP Operations */
62 #define BTA_HL_SDP_OP_NONE 0
63 #define BTA_HL_SDP_OP_CCH_INIT 1
64 #define BTA_HL_SDP_OP_DCH_OPEN_INIT 2
65 #define BTA_HL_SDP_OP_DCH_RECONNECT_INIT 3
66 #define BTA_HL_SDP_OP_SDP_QUERY_NEW 4
67 #define BTA_HL_SDP_OP_SDP_QUERY_CURRENT 5
68 
69 typedef uint8_t tBTA_HL_SDP_OPER;
70 
71 /* CCH Operations */
72 #define BTA_HL_CCH_OP_NONE 0
73 #define BTA_HL_CCH_OP_LOCAL_OPEN 1
74 #define BTA_HL_CCH_OP_REMOTE_OPEN 2
75 #define BTA_HL_CCH_OP_LOCAL_CLOSE 3
76 #define BTA_HL_CCH_OP_REMOTE_CLOSE 4
77 
78 typedef uint8_t tBTA_HL_CCH_OPER;
79 
80 /* Pending DCH close operations when closing a CCH */
81 #define BTA_HL_CCH_CLOSE_OP_DCH_NONE 0
82 #define BTA_HL_CCH_CLOSE_OP_DCH_ABORT 1
83 #define BTA_HL_CCH_CLOSE_OP_DCH_CLOSE 2
84 typedef uint8_t tBTA_HL_CCH_CLOSE_DCH_OPER;
85 
86 /* DCH Operations */
87 #define BTA_HL_DCH_OP_NONE 0
88 #define BTA_HL_DCH_OP_REMOTE_CREATE 1
89 #define BTA_HL_DCH_OP_LOCAL_OPEN 2
90 #define BTA_HL_DCH_OP_REMOTE_OPEN 3
91 #define BTA_HL_DCH_OP_LOCAL_CLOSE 4
92 #define BTA_HL_DCH_OP_REMOTE_CLOSE 5
93 #define BTA_HL_DCH_OP_LOCAL_DELETE 6
94 #define BTA_HL_DCH_OP_REMOTE_DELETE 7
95 #define BTA_HL_DCH_OP_LOCAL_RECONNECT 8
96 #define BTA_HL_DCH_OP_REMOTE_RECONNECT 9
97 #define BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST 10
98 #define BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT 11
99 
100 typedef uint8_t tBTA_HL_DCH_OPER;
101 
102 /* Echo test Operations */
103 #define BTA_HL_ECHO_OP_NONE 0
104 #define BTA_HL_ECHO_OP_CI_GET_ECHO_DATA 1
105 #define BTA_HL_ECHO_OP_SDP_INIT 2
106 #define BTA_HL_ECHO_OP_MDL_CREATE_CFM 3
107 #define BTA_HL_ECHO_OP_DCH_OPEN_CFM 4
108 #define BTA_HL_ECHO_OP_LOOP_BACK 5
109 #define BTA_HL_ECHO_OP_CI_PUT_ECHO_DATA 6
110 #define BTA_HL_ECHO_OP_DCH_CLOSE_CFM 7
111 #define BTA_HL_ECHO_OP_OPEN_IND 8
112 #define BTA_HL_ECHO_OP_ECHO_PKT 9
113 
114 typedef uint8_t tBTA_HL_ECHO_OPER;
115 
116 /* abort status mask for abort_oper */
117 
118 #define BTA_HL_ABORT_NONE_MASK 0x00
119 #define BTA_HL_ABORT_PENDING_MASK 0x01
120 #define BTA_HL_ABORT_LOCAL_MASK 0x10
121 #define BTA_HL_ABORT_REMOTE_MASK 0x20
122 #define BTA_HL_ABORT_CCH_CLOSE_MASK 0x40
123 
124 /* call out mask for cout_oper */
125 #define BTA_HL_CO_NONE_MASK 0x00
126 #define BTA_HL_CO_GET_TX_DATA_MASK 0x01
127 #define BTA_HL_CO_PUT_RX_DATA_MASK 0x02
128 #define BTA_HL_CO_GET_ECHO_DATA_MASK 0x04
129 #define BTA_HL_CO_PUT_ECHO_DATA_MASK 0x08
130 
131 typedef struct {
132   uint16_t mtu;
133   uint8_t fcs; /* '0' No FCS, otherwise '1' */
134 } tBTA_HL_L2CAP_CFG_INFO;
135 
136 /* State Machine Events */
137 enum {
138   /* these events are handled by the state machine */
139   BTA_HL_CCH_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_HL),
140   BTA_HL_CCH_SDP_OK_EVT,
141   BTA_HL_CCH_SDP_FAIL_EVT,
142   BTA_HL_MCA_CONNECT_IND_EVT,
143   BTA_HL_MCA_DISCONNECT_IND_EVT,
144   BTA_HL_CCH_CLOSE_EVT,
145   BTA_HL_CCH_CLOSE_CMPL_EVT,
146   BTA_HL_MCA_RSP_TOUT_IND_EVT,
147   /* DCH EVENT */
148   BTA_HL_DCH_SDP_INIT_EVT,
149   BTA_HL_DCH_OPEN_EVT,
150   BTA_HL_MCA_CREATE_IND_EVT,
151   BTA_HL_MCA_CREATE_CFM_EVT,
152   BTA_HL_MCA_OPEN_IND_EVT,
153 
154   BTA_HL_MCA_OPEN_CFM_EVT,
155   BTA_HL_DCH_CLOSE_EVT,
156   BTA_HL_MCA_CLOSE_IND_EVT,
157   BTA_HL_MCA_CLOSE_CFM_EVT,
158   BTA_HL_API_SEND_DATA_EVT,
159 
160   BTA_HL_MCA_RCV_DATA_EVT,
161   BTA_HL_DCH_CLOSE_CMPL_EVT,
162   BTA_HL_DCH_RECONNECT_EVT,
163   BTA_HL_DCH_SDP_FAIL_EVT,
164   BTA_HL_MCA_RECONNECT_IND_EVT,
165 
166   BTA_HL_MCA_RECONNECT_CFM_EVT,
167   BTA_HL_DCH_CLOSE_ECHO_TEST_EVT,
168   BTA_HL_API_DCH_CREATE_RSP_EVT,
169   BTA_HL_DCH_ABORT_EVT,
170   BTA_HL_MCA_ABORT_IND_EVT,
171 
172   BTA_HL_MCA_ABORT_CFM_EVT,
173   BTA_HL_MCA_CONG_CHG_EVT,
174   BTA_HL_CI_GET_TX_DATA_EVT,
175   BTA_HL_CI_PUT_RX_DATA_EVT,
176   BTA_HL_CI_GET_ECHO_DATA_EVT,
177   BTA_HL_DCH_ECHO_TEST_EVT,
178   BTA_HL_CI_PUT_ECHO_DATA_EVT,
179 
180   /* these events are handled outside the state machine */
181   BTA_HL_API_ENABLE_EVT,
182   BTA_HL_API_DISABLE_EVT,
183   BTA_HL_API_UPDATE_EVT,
184   BTA_HL_API_REGISTER_EVT,
185   BTA_HL_API_DEREGISTER_EVT,
186   BTA_HL_API_CCH_OPEN_EVT,
187   BTA_HL_API_CCH_CLOSE_EVT,
188   BTA_HL_API_DCH_OPEN_EVT,
189   BTA_HL_API_DCH_RECONNECT_EVT,
190   BTA_HL_API_DCH_CLOSE_EVT,
191   BTA_HL_API_DELETE_MDL_EVT,
192   BTA_HL_API_DCH_ABORT_EVT,
193 
194   BTA_HL_API_DCH_ECHO_TEST_EVT,
195   BTA_HL_API_SDP_QUERY_EVT,
196   BTA_HL_SDP_QUERY_OK_EVT,
197   BTA_HL_SDP_QUERY_FAIL_EVT,
198   BTA_HL_MCA_DELETE_IND_EVT,
199   BTA_HL_MCA_DELETE_CFM_EVT
200 };
201 typedef uint16_t tBTA_HL_INT_EVT;
202 
203 #define BTA_HL_DCH_EVT_MIN BTA_HL_DCH_SDP_INIT_EVT
204 #define BTA_HL_DCH_EVT_MAX 0xFFFF
205 
206 /* state machine states */
207 enum {
208   BTA_HL_CCH_IDLE_ST = 0, /* Idle  */
209   BTA_HL_CCH_OPENING_ST,  /* Opening a connection*/
210   BTA_HL_CCH_OPEN_ST,     /* Connection is open */
211   BTA_HL_CCH_CLOSING_ST   /* Closing is in progress */
212 };
213 typedef uint8_t tBTA_HL_CCH_STATE;
214 
215 enum {
216   BTA_HL_DCH_IDLE_ST = 0, /* Idle  */
217   BTA_HL_DCH_OPENING_ST,  /* Opening a connection*/
218   BTA_HL_DCH_OPEN_ST,     /* Connection is open */
219   BTA_HL_DCH_CLOSING_ST   /* Closing is in progress */
220 };
221 typedef uint8_t tBTA_HL_DCH_STATE;
222 
223 typedef struct {
224   BT_HDR hdr;
225   tBTA_HL_CTRL_CBACK* p_cback; /* pointer to control callback function */
226 } tBTA_HL_API_ENABLE;
227 
228 typedef struct {
229   BT_HDR hdr;
230   uint8_t app_id;
231   bool is_register; /* Update HL application due to register or deregister */
232   tBTA_HL_CBACK* p_cback;       /* pointer to application callback function */
233   tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */
234   tBTA_SEC sec_mask;            /* security mask for accepting conenction*/
235   char srv_name[BTA_SERVICE_NAME_LEN +
236                 1]; /* service name to be used in the SDP; null terminated*/
237   char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in
238                                               the SDP; null terminated */
239   char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in
240                                                     the SDP; null terminated */
241 
242 } tBTA_HL_API_UPDATE;
243 
244 typedef struct {
245   BT_HDR hdr;
246   uint8_t app_id;
247   tBTA_HL_CBACK* p_cback;       /* pointer to application callback function */
248   tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */
249   tBTA_SEC sec_mask;            /* security mask for accepting conenction*/
250   char srv_name[BTA_SERVICE_NAME_LEN +
251                 1]; /* service name to be used in the SDP; null terminated*/
252   char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in
253                                               the SDP; null terminated */
254   char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in
255                                                     the SDP; null terminated */
256 } tBTA_HL_API_REGISTER;
257 
258 typedef struct {
259   BT_HDR hdr;
260   uint8_t app_id;
261   tBTA_HL_CBACK* p_cback; /* pointer to application callback function */
262   tBTA_HL_APP_HANDLE app_handle;
263 } tBTA_HL_API_DEREGISTER;
264 
265 typedef struct {
266   BT_HDR hdr;
267   uint8_t app_id;
268   tBTA_HL_APP_HANDLE app_handle;
269   uint16_t ctrl_psm;
270   RawAddress bd_addr;  /* Address of peer device */
271   tBTA_SEC sec_mask;   /* security mask for initiating connection*/
272 } tBTA_HL_API_CCH_OPEN;
273 
274 typedef struct {
275   BT_HDR hdr;
276   tBTA_HL_MCL_HANDLE mcl_handle;
277 } tBTA_HL_API_CCH_CLOSE;
278 
279 typedef struct {
280   BT_HDR hdr;
281   tBTA_HL_MCL_HANDLE mcl_handle;
282   uint16_t ctrl_psm;
283   tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */
284   tBTA_HL_MDEP_ID peer_mdep_id;  /* peer mdep id */
285   tBTA_HL_DCH_CFG local_cfg;
286   tBTA_SEC sec_mask; /* security mask for initiating connection*/
287 } tBTA_HL_API_DCH_OPEN;
288 
289 typedef struct {
290   BT_HDR hdr;
291 
292   tBTA_HL_MCL_HANDLE mcl_handle;
293   uint16_t ctrl_psm;
294   tBTA_HL_MDL_ID mdl_id;
295 } tBTA_HL_API_DCH_RECONNECT;
296 
297 typedef struct {
298   BT_HDR hdr;
299   tBTA_HL_MDL_HANDLE mdl_handle;
300 } tBTA_HL_API_DCH_CLOSE;
301 
302 typedef struct {
303   BT_HDR hdr;
304   tBTA_HL_MCL_HANDLE mcl_handle;
305   tBTA_HL_MDL_ID mdl_id;
306 } tBTA_HL_API_DELETE_MDL;
307 
308 typedef struct {
309   BT_HDR hdr;
310   tBTA_HL_MCL_HANDLE mcl_handle;
311 } tBTA_HL_API_DCH_ABORT;
312 
313 typedef struct {
314   BT_HDR hdr;
315   tBTA_HL_MDL_HANDLE mdl_handle;
316   uint16_t pkt_size;
317 } tBTA_HL_API_SEND_DATA;
318 
319 typedef struct {
320   BT_HDR hdr;
321   tBTA_HL_MCL_HANDLE mcl_handle;
322   uint16_t ctrl_psm;
323   uint16_t pkt_size;
324   tBTA_HL_DCH_CFG local_cfg;
325 } tBTA_HL_API_DCH_ECHO_TEST;
326 
327 typedef struct {
328   BT_HDR hdr;
329   uint8_t app_idx;
330   uint8_t mcl_idx;
331   bool release_mcl_cb;
332 } tBTA_HL_CCH_SDP;
333 
334 /* MCA callback event parameters. */
335 typedef struct {
336   BT_HDR hdr;
337   tBTA_HL_APP_HANDLE app_handle;
338   tBTA_HL_MCL_HANDLE mcl_handle;
339   tMCA_CTRL mca_data;
340 } tBTA_HL_MCA_EVT;
341 
342 /* MCA callback event parameters. */
343 typedef struct {
344   BT_HDR hdr;
345   uint8_t app_idx;
346   uint8_t mcl_idx;
347   uint8_t mdl_idx;
348   BT_HDR* p_pkt;
349 } tBTA_HL_MCA_RCV_DATA_EVT;
350 
351 typedef struct {
352   BT_HDR hdr;
353   uint8_t app_idx;
354   uint8_t mcl_idx;
355   uint8_t mdl_idx;
356 } tBTA_HL_DCH_SDP;
357 
358 typedef struct {
359   BT_HDR hdr;
360   tBTA_HL_APP_HANDLE app_handle;
361   uint8_t app_id;
362   RawAddress bd_addr; /* Address of peer device */
363 } tBTA_HL_API_SDP_QUERY;
364 
365 typedef struct {
366   BT_HDR hdr;
367   tBTA_HL_MCL_HANDLE mcl_handle;
368   tBTA_HL_MDL_ID mdl_id;
369   tBTA_HL_MDEP_ID local_mdep_id;
370   tBTA_HL_DCH_CREATE_RSP rsp_code;
371   tBTA_HL_DCH_CFG cfg_rsp;
372 } tBTA_HL_API_DCH_CREATE_RSP;
373 
374 typedef struct {
375   BT_HDR hdr;
376   tBTA_HL_MDL_HANDLE mdl_handle;
377   tBTA_HL_STATUS status;
378 } tBTA_HL_CI_GET_PUT_DATA;
379 
380 typedef struct {
381   BT_HDR hdr;
382   tBTA_HL_MCL_HANDLE mcl_handle;
383   tBTA_HL_STATUS status;
384 } tBTA_HL_CI_ECHO_DATA;
385 
386 /* union of all state machine event data types */
387 typedef union {
388   BT_HDR hdr;
389   tBTA_HL_API_ENABLE api_enable; /* data for BTA_MSE_API_ENABLE_EVT */
390   tBTA_HL_API_UPDATE api_update;
391   tBTA_HL_API_REGISTER api_reg;
392   tBTA_HL_API_DEREGISTER api_dereg;
393   tBTA_HL_API_CCH_OPEN api_cch_open;
394   tBTA_HL_API_CCH_CLOSE api_cch_close;
395   tBTA_HL_API_DCH_CREATE_RSP api_dch_create_rsp;
396   tBTA_HL_API_DCH_OPEN api_dch_open;
397   tBTA_HL_API_DCH_RECONNECT api_dch_reconnect;
398   tBTA_HL_API_DCH_CLOSE api_dch_close;
399   tBTA_HL_API_DELETE_MDL api_delete_mdl;
400   tBTA_HL_API_DCH_ABORT api_dch_abort;
401   tBTA_HL_API_SEND_DATA api_send_data;
402   tBTA_HL_API_DCH_ECHO_TEST api_dch_echo_test;
403   tBTA_HL_API_SDP_QUERY api_sdp_query;
404 
405   tBTA_HL_CCH_SDP cch_sdp;
406   tBTA_HL_MCA_EVT mca_evt;
407   tBTA_HL_MCA_RCV_DATA_EVT mca_rcv_data_evt;
408   tBTA_HL_DCH_SDP dch_sdp; /* for DCH_OPEN_EVT and DCH_RECONNECT_EVT */
409   tBTA_HL_CI_GET_PUT_DATA ci_get_put_data;
410   tBTA_HL_CI_ECHO_DATA ci_get_put_echo_data;
411 } tBTA_HL_DATA;
412 
413 typedef struct {
414   bool in_use;
415   uint16_t mdl_id;
416   tBTA_HL_MDL_HANDLE mdl_handle;
417   tBTA_HL_DCH_OPER dch_oper;
418   bool intentional_close;
419   tBTA_HL_DCH_STATE dch_state;
420   uint8_t abort_oper;
421   uint16_t req_data_psm;
422   uint16_t max_rx_apdu_size;
423   uint16_t max_tx_apdu_size;
424   BT_HDR* p_tx_pkt;
425   BT_HDR* p_rx_pkt;
426   tBTA_HL_MDEP_ID local_mdep_id;
427   uint8_t local_mdep_cfg_idx;
428   tBTA_HL_DCH_CFG local_cfg;
429   tBTA_HL_DCH_CFG remote_cfg;
430   tBTA_HL_MDEP_ID peer_mdep_id;
431   uint16_t peer_data_type;
432   tBTA_HL_MDEP_ROLE peer_mdep_role;
433   tBTA_HL_DCH_MODE dch_mode;
434   tBTA_SEC sec_mask;
435   bool is_the_first_reliable;
436   bool delete_mdl;
437   uint16_t mtu;
438   tMCA_CHNL_CFG chnl_cfg;
439   bool mdl_cfg_idx_included;
440   uint8_t mdl_cfg_idx;
441   uint8_t echo_oper;
442   bool cong;
443   bool close_pending;
444   uint8_t cout_oper;
445   BT_HDR* p_echo_tx_pkt;
446   BT_HDR* p_echo_rx_pkt;
447   tBTA_HL_STATUS ci_put_echo_data_status;
448 } tBTA_HL_MDL_CB;
449 
450 typedef struct {
451   tBTA_HL_MDL_CB mdl[BTA_HL_NUM_MDLS_PER_MCL];
452   tBTA_HL_DELETE_MDL delete_mdl;
453   bool in_use;
454   tBTA_HL_CCH_STATE cch_state;
455   uint16_t req_ctrl_psm;
456   uint16_t ctrl_psm;
457   uint16_t data_psm;
458   RawAddress bd_addr;
459   uint16_t cch_mtu;
460   uint16_t sec_mask;
461   tBTA_HL_MCL_HANDLE mcl_handle;
462   tSDP_DISCOVERY_DB* p_db; /* pointer to discovery database */
463   tSDP_DISC_CMPL_CB* sdp_cback;
464   tBTA_HL_SDP_OPER sdp_oper;
465   bool close_pending;
466   uint8_t sdp_mdl_idx;
467   tBTA_HL_SDP sdp;
468   uint8_t cch_oper;
469   uint8_t force_close_local_cch_opening;
470   bool intentional_close;
471   bool rsp_tout;
472   uint8_t timer_oper;
473   bool echo_test;
474   uint8_t echo_mdl_idx;
475   uint8_t cch_close_dch_oper;
476   uint8_t app_id;
477 } tBTA_HL_MCL_CB;
478 
479 typedef struct {
480   tBTA_HL_MCL_CB mcb[BTA_HL_NUM_MCLS]; /* application Control Blocks */
481   tBTA_HL_CBACK* p_cback; /* pointer to control callback function */
482   bool in_use;            /* this CB is in use*/
483   bool deregistering;
484   uint8_t app_id;
485   uint32_t sdp_handle; /* SDP record handle */
486   tBTA_HL_SUP_FEATURE sup_feature;
487   tBTA_HL_MDL_CFG mdl_cfg[BTA_HL_NUM_MDL_CFGS];
488   tBTA_HL_DEVICE_TYPE dev_type;
489   tBTA_HL_APP_HANDLE app_handle;
490   uint16_t ctrl_psm; /* L2CAP PSM for the MCAP control channel */
491   uint16_t data_psm; /* L2CAP PSM for the MCAP data channel */
492   uint16_t sec_mask; /* Security mask for BTM_SetSecurityLevel() */
493 
494   char srv_name[BTA_SERVICE_NAME_LEN +
495                 1]; /* service name to be used in the SDP; null terminated*/
496   char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in
497                                               the SDP; null terminated */
498   char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in
499                                                     the SDP; null terminated */
500 
501   tMCA_CTRL_CBACK* p_mcap_cback; /* pointer to MCAP callback function */
502   tMCA_DATA_CBACK* p_data_cback;
503 } tBTA_HL_APP_CB;
504 
505 typedef struct {
506   bool in_use;
507   tBTA_HL_SDP_OPER sdp_oper;
508   uint8_t app_idx;
509   uint8_t mcl_idx;
510   uint8_t mdl_idx;
511 } tBTA_HL_SDP_CB;
512 
513 typedef struct {
514   bool in_use;
515   uint8_t app_idx;
516   uint8_t mcl_idx;
517 } tBTA_HL_TIMER_CB;
518 
519 typedef struct {
520   tBTA_HL_APP_CB acb[BTA_HL_NUM_APPS]; /* HL Control Blocks */
521   tBTA_HL_CTRL_CBACK* p_ctrl_cback; /* pointer to control callback function */
522   bool enable;
523   bool disabling;
524 
525   tBTA_HL_SDP_CB scb[BTA_HL_NUM_SDP_CBACKS];
526   tBTA_HL_TIMER_CB tcb[BTA_HL_NUM_TIMERS];
527   bool enable_random_psm;
528   tBTA_HL_ALLOCATE_PSM* p_alloc_psm;
529 } tBTA_HL_CB;
530 
531 /******************************************************************************
532  *  Configuration Definitions
533  ******************************************************************************/
534 /* Configuration structure */
535 
536 /*****************************************************************************
537  *  Global data
538  ****************************************************************************/
539 
540 /* HL control block */
541 extern tBTA_HL_CB bta_hl_cb;
542 
543 #define BTA_HL_GET_CB_PTR() &(bta_hl_cb)
544 #define BTA_HL_GET_APP_CB_PTR(app_idx) &(bta_hl_cb.acb[(app_idx)])
545 #define BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx) \
546   &(bta_hl_cb.acb[(app_idx)].mcb[(mcl_idx)])
547 #define BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx) \
548   &(bta_hl_cb.acb[(app_idx)].mcb[(mcl_idx)].mdl[(mdl_idx)])
549 #define BTA_HL_GET_MDL_CFG_PTR(app_idx, item_idx) \
550   &(bta_hl_cb.acb[(app_idx)].mdl_cfg[(item_idx)])
551 #define BTA_HL_GET_ECHO_CFG_PTR(app_idx) \
552   &(bta_hl_cb.acb[(app_idx)].sup_feature.echo_cfg)
553 #define BTA_HL_GET_MDEP_CFG_PTR(app_idx, mdep_cfg_idx) \
554   &(bta_hl_cb.acb[(app_idx)].sup_feature.mdep[(mdep_cfg_idx)].mdep_cfg)
555 #define BTA_HL_GET_DATA_CFG_PTR(app_idx, mdep_cfg_idx, data_cfg_idx) \
556   &(bta_hl_cb.acb[(app_idx)]                                         \
557         .sup_feature.mdep[(mdep_cfg_idx)]                            \
558         .mdep_cfg.data_cfg[(data_cfg_idx)])
559 #define BTA_HL_GET_BUF_PTR(p_pkt) \
560   ((uint8_t*)((uint8_t*)((p_pkt) + 1) + (p_pkt)->offset))
561 
562 /*****************************************************************************
563  *  Function prototypes
564  ****************************************************************************/
565 /* main */
566 extern bool bta_hl_hdl_event(BT_HDR* p_msg);
567 /* sdp */
568 extern bool bta_hl_fill_sup_feature_list(const tSDP_DISC_ATTR* p_attr,
569                                          tBTA_HL_SUP_FEATURE_LIST_ELEM* p_list);
570 extern tBTA_HL_STATUS bta_hl_sdp_update(uint8_t app_id);
571 extern tBTA_HL_STATUS bta_hl_sdp_register(uint8_t app_idx);
572 extern tSDP_DISC_REC* bta_hl_find_sink_or_src_srv_class_in_db(
573     const tSDP_DISCOVERY_DB* p_db, const tSDP_DISC_REC* p_start_rec);
574 
575 /* action routines */
576 extern void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx,
577                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
578 extern void bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx,
579                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
580 extern void bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx,
581                                         uint8_t mdl_idx, tBTA_HL_DATA* p_data);
582 
583 extern void bta_hl_dch_echo_test(uint8_t app_idx, uint8_t mcl_idx,
584                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
585 extern void bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx,
586                                         uint8_t mdl_idx, tBTA_HL_DATA* p_data);
587 extern void bta_hl_dch_send_data(uint8_t app_idx, uint8_t mcl_idx,
588                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
589 extern void bta_hl_dch_sdp_fail(uint8_t app_idx, uint8_t mcl_idx,
590                                 uint8_t mdl_idx, tBTA_HL_DATA* p_data);
591 extern void bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx,
592                                        uint8_t mdl_idx, tBTA_HL_DATA* p_data);
593 extern void bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx,
594                                          uint8_t mdl_idx, tBTA_HL_DATA* p_data);
595 extern void bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx,
596                                          uint8_t mdl_idx, tBTA_HL_DATA* p_data);
597 extern void bta_hl_dch_mca_reconnect(uint8_t app_idx, uint8_t mcl_idx,
598                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
599 extern void bta_hl_dch_sdp_init(uint8_t app_idx, uint8_t mcl_idx,
600                                 uint8_t mdl_idx, tBTA_HL_DATA* p_data);
601 extern void bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx,
602                                        uint8_t mdl_idx, tBTA_HL_DATA* p_data);
603 extern void bta_hl_dch_create_rsp(uint8_t app_idx, uint8_t mcl_idx,
604                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
605 extern void bta_hl_dch_mca_rcv_data(uint8_t app_idx, uint8_t mcl_idx,
606                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
607 extern void bta_hl_dch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx,
608                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
609 extern void bta_hl_dch_mca_close_cfm(uint8_t app_idx, uint8_t mcl_idx,
610                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
611 extern void bta_hl_dch_mca_close_ind(uint8_t app_idx, uint8_t mcl_idx,
612                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
613 extern void bta_hl_dch_mca_close(uint8_t app_idx, uint8_t mcl_idx,
614                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
615 extern void bta_hl_dch_mca_delete_ind(uint8_t app_idx, uint8_t mcl_idx,
616                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
617 
618 extern void bta_hl_dch_mca_delete_cfm(uint8_t app_idx, uint8_t mcl_idx,
619                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
620 extern void bta_hl_dch_mca_delete(uint8_t app_idx, uint8_t mcl_idx,
621                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
622 extern void bta_hl_dch_mca_abort_ind(uint8_t app_idx, uint8_t mcl_idx,
623                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
624 extern void bta_hl_dch_mca_abort_cfm(uint8_t app_idx, uint8_t mcl_idx,
625                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
626 extern void bta_hl_dch_mca_abort(uint8_t app_idx, uint8_t mcl_idx,
627                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
628 extern void bta_hl_dch_mca_open_ind(uint8_t app_idx, uint8_t mcl_idx,
629                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
630 extern void bta_hl_dch_mca_open_cfm(uint8_t app_idx, uint8_t mcl_idx,
631                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
632 extern void bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx,
633                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
634 extern void bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx,
635                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
636 extern void bta_hl_dch_mca_create(uint8_t app_idx, uint8_t mcl_idx,
637                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
638 extern void bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx);
639 extern tSDP_DISC_CMPL_CB* bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper,
640                                                     uint8_t app_idx,
641                                                     uint8_t mcl_idx,
642                                                     uint8_t mdl_idx,
643                                                     uint8_t* p_sdp_cback_idx);
644 extern tBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper,
645                                       uint8_t app_idx, uint8_t mcl_idx,
646                                       uint8_t mdl_idx);
647 extern void bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx,
648                                 tBTA_HL_DATA* p_data);
649 extern void bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx,
650                                 tBTA_HL_DATA* p_data);
651 extern void bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx,
652                                  tBTA_HL_DATA* p_data);
653 extern void bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx,
654                                   tBTA_HL_DATA* p_data);
655 extern void bta_hl_cch_mca_disconnect(uint8_t app_idx, uint8_t mcl_idx,
656                                       tBTA_HL_DATA* p_data);
657 extern void bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx,
658                                      tBTA_HL_DATA* p_data);
659 extern void bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx,
660                                     tBTA_HL_DATA* p_data);
661 extern void bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx,
662                                    tBTA_HL_DATA* p_data);
663 
664 /* State machine drivers  */
665 extern void bta_hl_cch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx,
666                                   uint16_t event, tBTA_HL_DATA* p_data);
667 extern void bta_hl_dch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx,
668                                   uint8_t mdl_idx, uint16_t event,
669                                   tBTA_HL_DATA* p_data);
670 /* MCAP callback functions  */
671 extern void bta_hl_mcap_ctrl_cback(tMCA_HANDLE handle, tMCA_CL mcl,
672                                    uint8_t event, tMCA_CTRL* p_data);
673 
674 extern void bta_hl_mcap_data_cback(tMCA_DL mdl, BT_HDR* p_pkt);
675 
676 /* utility functions  */
677 extern bool bta_hl_set_ctrl_psm_for_dch(uint8_t app_idx, uint8_t mcl_idx,
678                                         uint8_t mdl_idx, uint16_t ctrl_psm);
679 extern bool bta_hl_find_sdp_idx_using_ctrl_psm(tBTA_HL_SDP* p_sdp,
680                                                uint16_t ctrl_psm,
681                                                uint8_t* p_sdp_idx);
682 extern uint16_t bta_hl_set_user_tx_buf_size(uint16_t max_tx_size);
683 extern uint16_t bta_hl_set_user_rx_buf_size(uint16_t mtu);
684 extern uint8_t bta_hl_set_tx_win_size(uint16_t mtu, uint16_t mps);
685 extern uint16_t bta_hl_set_mps(uint16_t mtu);
686 extern void bta_hl_clean_mdl_cb(uint8_t app_idx, uint8_t mcl_idx,
687                                 uint8_t mdl_idx);
688 extern BT_HDR* bta_hl_get_buf(uint16_t data_size, bool fcs_use);
689 extern bool bta_hl_find_service_in_db(uint8_t app_idx, uint8_t mcl_idx,
690                                       uint16_t service_uuid,
691                                       tSDP_DISC_REC** pp_rec);
692 extern uint16_t bta_hl_get_service_uuids(uint8_t sdp_oper, uint8_t app_idx,
693                                          uint8_t mcl_idx, uint8_t mdl_idx);
694 extern bool bta_hl_find_echo_cfg_rsp(uint8_t app_idx, uint8_t mcl_idx,
695                                      uint8_t mdep_idx, uint8_t cfg,
696                                      uint8_t* p_cfg_rsp);
697 extern bool bta_hl_validate_cfg(uint8_t app_idx, uint8_t mcl_idx,
698                                 uint8_t mdl_idx, uint8_t cfg);
699 extern bool bta_hl_find_cch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx,
700                                        uint8_t* p_mcl_idx);
701 extern bool bta_hl_find_dch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx,
702                                        uint8_t* p_mcl_idx, uint8_t* p_mdl_idx);
703 extern uint16_t bta_hl_allocate_mdl_id(uint8_t app_idx, uint8_t mcl_idx,
704                                        uint8_t mdl_idx);
705 extern bool bta_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle,
706                                              uint8_t* p_app_idx,
707                                              uint8_t* p_mcl_idx,
708                                              uint8_t* p_mdl_idx);
709 extern bool bta_hl_find_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
710                                 uint16_t mdl_id, uint8_t* p_mdl_idx);
711 extern bool bta_hl_find_an_active_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
712                                           uint8_t* p_mdl_idx);
713 extern bool bta_hl_find_dch_setup_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
714                                           uint8_t* p_mdl_idx);
715 extern bool bta_hl_find_an_in_use_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx);
716 extern bool bta_hl_find_an_in_use_app_idx(uint8_t* p_app_idx);
717 extern bool bta_hl_find_app_idx(uint8_t app_id, uint8_t* p_app_idx);
718 extern bool bta_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle,
719                                              uint8_t* p_app_idx);
720 extern bool bta_hl_find_mcl_idx_using_handle(tBTA_HL_MCL_HANDLE mcl_handle,
721                                              uint8_t* p_app_idx,
722                                              uint8_t* p_mcl_idx);
723 extern bool bta_hl_find_mcl_idx(uint8_t app_idx, const RawAddress& p_bd_addr,
724                                 uint8_t* p_mcl_idx);
725 extern bool bta_hl_is_the_first_reliable_existed(uint8_t app_idx,
726                                                  uint8_t mcl_idx);
727 extern bool bta_hl_find_non_active_mdl_cfg(uint8_t app_idx,
728                                            uint8_t start_mdl_cfg_idx,
729                                            uint8_t* p_mdl_cfg_idx);
730 extern bool bta_hl_find_avail_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx,
731                                           uint8_t* p_mdl_cfg_idx);
732 extern bool bta_hl_find_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx,
733                                     tBTA_HL_MDL_ID mdl_id,
734                                     uint8_t* p_mdl_cfg_idx);
735 extern bool bta_hl_get_cur_time(uint8_t app_idx, uint8_t* p_cur_time);
736 extern void bta_hl_sort_cfg_time_idx(uint8_t app_idx, uint8_t* a, uint8_t n);
737 extern void bta_hl_compact_mdl_cfg_time(uint8_t app_idx, uint8_t mdep_id);
738 extern bool bta_hl_is_mdl_exsit_in_mcl(uint8_t app_idx,
739                                        const RawAddress& bd_addr,
740                                        tBTA_HL_MDL_ID mdl_id);
741 extern bool bta_hl_delete_mdl_cfg(uint8_t app_idx, const RawAddress& bd_addr,
742                                   tBTA_HL_MDL_ID mdl_id);
743 extern bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id);
744 extern bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx,
745                                      tBTA_HL_MDEP_ID local_mdep_id,
746                                      uint8_t* p_mdep_cfg_idx);
747 extern void bta_hl_find_rxtx_apdu_size(uint8_t app_idx, uint8_t mdep_cfg_idx,
748                                        uint16_t* p_rx_apu_size,
749                                        uint16_t* p_tx_apu_size);
750 extern bool bta_hl_validate_peer_cfg(uint8_t app_idx, uint8_t mcl_idx,
751                                      uint8_t mdl_idx,
752                                      tBTA_HL_MDEP_ID peer_mdep_id,
753                                      tBTA_HL_MDEP_ROLE peer_mdep_role,
754                                      uint8_t sdp_idx);
755 extern tBTA_HL_STATUS bta_hl_chk_local_cfg(uint8_t app_idx, uint8_t mcl_idx,
756                                            uint8_t mdep_cfg_idx,
757                                            tBTA_HL_DCH_CFG local_cfg);
758 
759 extern bool bta_hl_validate_reconnect_params(
760     uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_API_DCH_RECONNECT* p_reconnect,
761     uint8_t* p_mdep_cfg_idx, uint8_t* p_mdl_cfg_idx);
762 extern bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx);
763 extern bool bta_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
764                                       uint8_t* p_mdl_idx);
765 extern bool bta_hl_is_a_duplicate_id(uint8_t app_id);
766 extern bool bta_hl_find_avail_app_idx(uint8_t* p_idx);
767 extern tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register);
768 extern tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx);
769 extern void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA* p_data);
770 extern void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx,
771                                 uint8_t mdl_idx);
772 extern void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx,
773                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
774 extern bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd,
775                                  tBTA_HL_L2CAP_CFG_INFO* p_cfg);
776 extern bool bta_hl_validate_chan_cfg(uint8_t app_idx, uint8_t mcl_idx,
777                                      uint8_t mdl_idx);
778 extern bool bta_hl_is_cong_on(uint8_t app_id, const RawAddress& bd_addr,
779                               tBTA_HL_MDL_ID mdl_id);
780 extern void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx,
781                                    tBTA_HL_DATA* p_data, bool check_dch_setup);
782 extern void bta_hl_clean_app(uint8_t app_idx);
783 extern void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA* p_data);
784 extern void bta_hl_check_disable(tBTA_HL_DATA* p_data);
785 extern void bta_hl_build_abort_ind(tBTA_HL* p_evt_data,
786                                    tBTA_HL_APP_HANDLE app_handle,
787                                    tBTA_HL_MCL_HANDLE mcl_handle);
788 extern void bta_hl_build_abort_cfm(tBTA_HL* p_evt_data,
789                                    tBTA_HL_APP_HANDLE app_handle,
790                                    tBTA_HL_MCL_HANDLE mcl_handle,
791                                    tBTA_HL_STATUS status);
792 extern void bta_hl_build_dch_close_cfm(tBTA_HL* p_evt_data,
793                                        tBTA_HL_APP_HANDLE app_handle,
794                                        tBTA_HL_MCL_HANDLE mcl_handle,
795                                        tBTA_HL_MDL_HANDLE mdl_handle,
796                                        tBTA_HL_STATUS status);
797 extern void bta_hl_build_dch_close_ind(tBTA_HL* p_evt_data,
798                                        tBTA_HL_APP_HANDLE app_handle,
799                                        tBTA_HL_MCL_HANDLE mcl_handle,
800                                        tBTA_HL_MDL_HANDLE mdl_handle,
801                                        bool intentional);
802 extern void bta_hl_build_send_data_cfm(tBTA_HL* p_evt_data,
803                                        tBTA_HL_APP_HANDLE app_handle,
804                                        tBTA_HL_MCL_HANDLE mcl_handle,
805                                        tBTA_HL_MDL_HANDLE mdl_handle,
806                                        tBTA_HL_STATUS status);
807 extern void bta_hl_build_rcv_data_ind(tBTA_HL* p_evt_data,
808                                       tBTA_HL_APP_HANDLE app_handle,
809                                       tBTA_HL_MCL_HANDLE mcl_handle,
810                                       tBTA_HL_MDL_HANDLE mdl_handle);
811 extern void bta_hl_build_cch_open_cfm(tBTA_HL* p_evt_data, uint8_t app_id,
812                                       tBTA_HL_APP_HANDLE app_handle,
813                                       tBTA_HL_MCL_HANDLE mcl_handle,
814                                       const RawAddress& bd_addr,
815                                       tBTA_HL_STATUS status);
816 extern void bta_hl_build_cch_open_ind(tBTA_HL* p_evt_data,
817                                       tBTA_HL_APP_HANDLE app_handle,
818                                       tBTA_HL_MCL_HANDLE mcl_handle,
819                                       const RawAddress& bd_addr);
820 extern void bta_hl_build_cch_close_cfm(tBTA_HL* p_evt_data,
821                                        tBTA_HL_APP_HANDLE app_handle,
822                                        tBTA_HL_MCL_HANDLE mcl_handle,
823                                        tBTA_HL_STATUS status);
824 extern void bta_hl_build_cch_close_ind(tBTA_HL* p_evt_data,
825                                        tBTA_HL_APP_HANDLE app_handle,
826                                        tBTA_HL_MCL_HANDLE mcl_handle,
827                                        bool intentional);
828 
829 extern void bta_hl_build_dch_open_cfm(
830     tBTA_HL* p_evt_data, tBTA_HL_APP_HANDLE app_handle,
831     tBTA_HL_MCL_HANDLE mcl_handle, tBTA_HL_MDL_HANDLE mdl_handle,
832     tBTA_HL_MDEP_ID local_mdep_id, tBTA_HL_MDL_ID mdl_id,
833     tBTA_HL_DCH_MODE dch_mode, bool first_reliable, uint16_t mtu,
834     tBTA_HL_STATUS status);
835 
836 extern void bta_hl_build_delete_mdl_cfm(tBTA_HL* p_evt_data,
837                                         tBTA_HL_APP_HANDLE app_handle,
838                                         tBTA_HL_MCL_HANDLE mcl_handle,
839                                         tBTA_HL_MDL_ID mdl_id,
840                                         tBTA_HL_STATUS status);
841 extern void bta_hl_build_echo_test_cfm(tBTA_HL* p_evt_data,
842                                        tBTA_HL_APP_HANDLE app_handle,
843                                        tBTA_HL_MCL_HANDLE mcl_handle,
844                                        tBTA_HL_STATUS status);
845 extern void bta_hl_build_sdp_query_cfm(tBTA_HL* p_evt_data, uint8_t app_id,
846                                        tBTA_HL_APP_HANDLE app_handle,
847                                        const RawAddress& bd_addr,
848                                        tBTA_HL_SDP* p_sdp,
849                                        tBTA_HL_STATUS status);
850 
851 #if (BTA_HL_DEBUG == TRUE)
852 extern const char* bta_hl_status_code(tBTA_HL_STATUS status);
853 extern const char* bta_hl_evt_code(tBTA_HL_INT_EVT evt_code);
854 #endif
855 
856 #endif /* BTA_MSE_INT_H */
857