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