1 /******************************************************************************
2  *
3  *  Copyright (C) 2009-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 public interface file for the HeaLth device profile (HL)
22  *  subsystem of BTA, Broadcom's Bluetooth application layer for mobile
23  *  phones.
24  *
25  ******************************************************************************/
26 #ifndef BTA_HL_API_H
27 #define BTA_HL_API_H
28 
29 #include "bta_api.h"
30 #include "btm_api.h"
31 #include "mca_api.h"
32 
33 /*****************************************************************************
34 **  Constants and data types
35 *****************************************************************************/
36 /* Extra Debug Code */
37 #ifndef BTA_HL_DEBUG
38 #define BTA_HL_DEBUG           TRUE
39 #endif
40 
41 #ifndef BTA_HL_NUM_APPS
42 #define BTA_HL_NUM_APPS                 12
43 #endif
44 
45 #ifndef BTA_HL_NUM_MDEPS
46 #define BTA_HL_NUM_MDEPS                13
47 #endif
48 
49 #ifndef BTA_HL_NUM_MCLS
50 #define BTA_HL_NUM_MCLS                 7
51 #endif
52 
53 #ifndef BTA_HL_NUM_MDLS_PER_MDEP
54 #define BTA_HL_NUM_MDLS_PER_MDEP        4
55 #endif
56 
57 #ifndef BTA_HL_NUM_MDLS_PER_MCL
58 #define BTA_HL_NUM_MDLS_PER_MCL         10
59 #endif
60 
61 #ifndef BTA_HL_NUM_DATA_TYPES
62 #define BTA_HL_NUM_DATA_TYPES            5   /* maximum number of data types can be supported
63                                                 per MDEP ID */
64 #endif
65 
66 #define BTA_HL_MCAP_RSP_TOUT            2    /* 2 seconds */
67 
68 #ifndef BTA_HL_CCH_NUM_FILTER_ELEMS
69 #define BTA_HL_CCH_NUM_FILTER_ELEMS     3
70 #endif
71 
72 #ifndef BTA_HL_NUM_SDP_CBACKS
73 #define BTA_HL_NUM_SDP_CBACKS           7
74 #endif
75 
76 #ifndef BTA_HL_NUM_SDP_RECS
77 #define BTA_HL_NUM_SDP_RECS             5
78 #endif
79 
80 #ifndef BTA_HL_NUM_SDP_MDEPS
81 #define BTA_HL_NUM_SDP_MDEPS            12
82 #endif
83 
84 #ifndef BTA_HL_NUM_SVC_ELEMS
85 #define BTA_HL_NUM_SVC_ELEMS            2
86 #endif
87 
88 #ifndef BTA_HL_NUM_PROTO_ELEMS
89 #define BTA_HL_NUM_PROTO_ELEMS          2
90 #endif
91 
92 #define BTA_HL_VERSION_01_00            0x0100
93 #define BTA_HL_NUM_ADD_PROTO_LISTS      1
94 #define BTA_HL_NUM_ADD_PROTO_ELEMS      2
95 #define BTA_HL_MDEP_SEQ_SIZE            20
96 #define BTA_HL_VAL_ARRY_SIZE            320
97 
98 #ifndef BTA_HL_NUM_MDL_CFGS
99 #define BTA_HL_NUM_MDL_CFGS             16    /* numer of MDL cfg saved in the persistent memory*/
100 #endif
101 
102 #define BTA_HL_NUM_TIMERS               7
103 
104 #define BTA_HL_CCH_RSP_TOUT             2000
105 #define BTA_HL_MAX_TIME                 255
106 #define BTA_HL_MIN_TIME                 1
107 #define BTA_HL_INVALID_APP_HANDLE       0xFF
108 #define BTA_HL_INVALID_MCL_HANDLE       0xFF
109 #define BTA_HL_INVALID_MDL_HANDLE       0xFFFF
110 
111 #define BTA_HL_STATUS_OK                    0
112 #define BTA_HL_STATUS_FAIL                  1   /* Used to pass all other errors */
113 #define BTA_HL_STATUS_ABORTED               2
114 #define BTA_HL_STATUS_NO_RESOURCE           3
115 #define BTA_HL_STATUS_LAST_ITEM             4
116 #define BTA_HL_STATUS_DUPLICATE_APP_ID      5
117 #define BTA_HL_STATUS_INVALID_APP_HANDLE    6
118 #define BTA_HL_STATUS_INVALID_MCL_HANDLE    7
119 #define BTA_HL_STATUS_MCAP_REG_FAIL         8
120 #define BTA_HL_STATUS_MDEP_CO_FAIL          9
121 #define BTA_HL_STATUS_ECHO_CO_FAIL          10
122 #define BTA_HL_STATUS_MDL_CFG_CO_FAIL       11
123 #define BTA_HL_STATUS_SDP_NO_RESOURCE       12
124 #define BTA_HL_STATUS_SDP_FAIL              13
125 #define BTA_HL_STATUS_NO_CCH                14
126 #define BTA_HL_STATUS_NO_MCL                15
127 
128 #define BTA_HL_STATUS_NO_FIRST_RELIABLE     17
129 #define BTA_HL_STATUS_INVALID_DCH_CFG       18
130 #define BTA_HL_STATUS_INVALID_MDL_HANDLE    19
131 #define BTA_HL_STATUS_INVALID_BD_ADDR       20
132 #define BTA_HL_STATUS_INVALID_RECONNECT_CFG 21
133 #define BTA_HL_STATUS_ECHO_TEST_BUSY        22
134 #define BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID 23
135 #define BTA_HL_STATUS_INVALID_MDL_ID        24
136 #define BTA_HL_STATUS_NO_MDL_ID_FOUND       25
137 #define BTA_HL_STATUS_DCH_BUSY              26  /* DCH is congested*/
138 #define BTA_HL_STATUS_INVALID_CTRL_PSM      27
139 #define BTA_HL_STATUS_DUPLICATE_CCH_OPEN    28
140 
141 typedef UINT8 tBTA_HL_STATUS;
142 typedef tMCA_HANDLE tBTA_HL_APP_HANDLE;
143 typedef tMCA_CL     tBTA_HL_MCL_HANDLE;
144 typedef tMCA_DL     tBTA_HL_MDL_HANDLE;
145 enum
146 {
147     BTA_HL_DEVICE_TYPE_SINK,
148     BTA_HL_DEVICE_TYPE_SOURCE,
149     BTA_HL_DEVICE_TYPE_DUAL
150 };
151 
152 typedef UINT8 tBTA_HL_DEVICE_TYPE;
153 
154 
155 
156 #define BTA_HL_SDP_IEEE_11073_20601             0x01
157 
158 #define BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT          2 /* 0x02 */
159 #define BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT        4 /* 0x04 */
160 #define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE          0 /* 0x08 */
161 #define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER         0 /* 0x10 */
162 
163 #define BTA_HL_MCAP_SUP_PROC_MASK  (BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT | \
164                                     BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT | \
165                                     BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE | \
166                                     BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER)
167 #define BTA_HL_MDEP_ROLE_SOURCE         0x00
168 #define BTA_HL_MDEP_ROLE_SINK           0x01
169 
170 typedef UINT8 tBTA_HL_MDEP_ROLE;
171 
172 #define BTA_HL_MDEP_ROLE_MASK_SOURCE    0x01     /* bit mask */
173 #define BTA_HL_MDEP_ROLE_MASK_SINK      0x02
174 typedef UINT8 tBTA_HL_MDEP_ROLE_MASK;
175 
176 
177 #define BTA_HL_ECHO_TEST_MDEP_ID        0
178 #define BTA_HL_ECHO_TEST_MDEP_CFG_IDX   0
179 
180 #define BTA_HL_INVALID_MDEP_ID     0xFF
181 typedef tMCA_DEP tBTA_HL_MDEP_ID; /* 0 is for echo test,
182                                    0x01-0x7F availave for use,
183                                    0x80-0xFF reserved*/
184 
185 
186 #define BTA_HL_DELETE_ALL_MDL_IDS   0xFFFF
187 #define BTA_HL_MAX_MDL_VAL          0xFEFF
188 typedef UINT16 tBTA_HL_MDL_ID;  /* 0x0000 reserved,
189                                    0x0001-0xFEFF dynamic range,
190                                    0xFF00-0xFFFE reserved,
191                                    0xFFFF indicates all MDLs*/
192 
193 #define BTA_HL_MDEP_DESP_LEN       35
194 
195 #define BTA_HL_DCH_MODE_RELIABLE    0
196 #define BTA_HL_DCH_MODE_STREAMING   1
197 
198 typedef UINT8 tBTA_HL_DCH_MODE;
199 
200 #define BTA_HL_DCH_CFG_NO_PREF      0
201 #define BTA_HL_DCH_CFG_RELIABLE     1
202 #define BTA_HL_DCH_CFG_STREAMING    2
203 #define BTA_HL_DCH_CFG_UNKNOWN      0xFF
204 
205 typedef UINT8 tBTA_HL_DCH_CFG;
206 
207 /* The Default DCH CFG for the echo test when the device is a Source */
208 #define BTA_HL_DEFAULT_ECHO_TEST_SRC_DCH_CFG BTA_HL_DCH_CFG_RELIABLE
209 
210 #define BTA_HL_DCH_CREATE_RSP_SUCCESS 0
211 #define BTA_HL_DCH_CREATE_RSP_CFG_REJ 1
212 
213 typedef UINT8 tBTA_HL_DCH_CREATE_RSP;
214 
215 #define BTA_HL_MCAP_SUP_PROC_RECONNECT_INIT 0x02
216 #define BTA_HL_MCAP_SUP_PROC_RECONNECT_APT  0x04
217 #define BTA_HL_MCAP_SUP_PROC_CSP_SLAVE      0x08
218 #define BTA_HL_MCAP_SUP_PROC_CSP_MASTER     0x10
219 
220 typedef UINT8 tBTA_HL_SUP_PROC_MASK;
221 
222 typedef struct
223 {
224     UINT16                  max_rx_apdu_size;  /* local rcv MTU */
225     UINT16                  max_tx_apdu_size;  /* maximum TX APDU size*/
226 } tBTA_HL_ECHO_CFG;
227 
228 
229 typedef struct
230 {
231     UINT16                  data_type;
232     UINT16                  max_rx_apdu_size;  /* local rcv MTU */
233     UINT16                  max_tx_apdu_size;  /* maximum TX APDU size*/
234     char                    desp[BTA_HL_MDEP_DESP_LEN+1];
235 } tBTA_HL_MDEP_DATA_TYPE_CFG;
236 
237 
238 typedef struct
239 {
240     tBTA_HL_MDEP_ROLE           mdep_role;
241     UINT8                       num_of_mdep_data_types;
242     tBTA_HL_MDEP_DATA_TYPE_CFG  data_cfg[BTA_HL_NUM_DATA_TYPES];
243 } tBTA_HL_MDEP_CFG;
244 
245 typedef struct
246 {
247     tBTA_HL_MDEP_ID         mdep_id;  /* MDEP ID 0x01-0x7F */
248     tBTA_HL_MDEP_CFG        mdep_cfg;
249     UINT8                   ori_app_id;
250 } tBTA_HL_MDEP;
251 
252 typedef struct
253 {
254     tBTA_HL_MDEP            mdep[BTA_HL_NUM_MDEPS];
255     tBTA_HL_ECHO_CFG        echo_cfg;
256     tBTA_HL_MDEP_ROLE_MASK  app_role_mask;
257     BOOLEAN                 advertize_source_sdp;
258     UINT8                   num_of_mdeps;
259 } tBTA_HL_SUP_FEATURE;
260 
261 typedef struct
262 {
263     BOOLEAN                 delete_req_pending;
264     tBTA_HL_MDL_ID          mdl_id;
265     tBTA_HL_MCL_HANDLE      mcl_handle;
266 } tBTA_HL_DELETE_MDL;
267 
268 typedef struct
269 {
270     UINT8                   time;
271     UINT16                  mtu;
272     tBTA_HL_MDL_ID          mdl_id;
273     tBTA_HL_MDEP_ID         local_mdep_id;
274     tBTA_HL_MDEP_ROLE       local_mdep_role;
275     BOOLEAN                 active;     /* true if this item is in use */
276     tBTA_HL_DCH_MODE        dch_mode;
277     UINT8                   fcs;
278     BD_ADDR                 peer_bd_addr;
279 } tBTA_HL_MDL_CFG;
280 
281 
282 /* Maximum number of supported feature list items (list_elem in tSDP_SUP_FEATURE_ELEM) */
283 #define BTA_HL_NUM_SUP_FEATURE_ELEMS     13
284 #define BTA_HL_SUP_FEATURE_SDP_BUF_SIZE  512
285 /* This structure is used to add supported feature lists and find supported feature elements */
286 typedef struct
287 {
288     UINT8       mdep_id;
289     UINT16      data_type;
290     tBTA_HL_MDEP_ROLE       mdep_role;
291     char        *p_mdep_desp;
292 } tBTA_HL_SUP_FEATURE_ELEM;
293 
294 typedef struct
295 {
296     UINT16                      num_elems;
297     tBTA_HL_SUP_FEATURE_ELEM   list_elem[BTA_HL_NUM_SUP_FEATURE_ELEMS];
298 } tBTA_HL_SUP_FEATURE_LIST_ELEM;
299 
300 
301 typedef struct
302 {
303     tBTA_HL_DEVICE_TYPE     dev_type;           /* sink, source or dual roles */
304     tBTA_SEC                sec_mask;           /* security mask for accepting conenction*/
305     const char              *p_srv_name;        /* service name to be used in the SDP; null terminated*/
306     const char              *p_srv_desp;        /* service description to be used in the SDP; null terminated */
307     const char              *p_provider_name;   /* provide name to be used in the SDP; null terminated */
308 } tBTA_HL_REG_PARAM;
309 
310 typedef struct
311 {
312     UINT16                  ctrl_psm;
313     BD_ADDR                 bd_addr;           /* Address of peer device */
314     tBTA_SEC                sec_mask;          /* security mask for initiating connection*/
315 } tBTA_HL_CCH_OPEN_PARAM;
316 
317 
318 typedef struct
319 {
320     UINT16                  ctrl_psm;
321     tBTA_HL_MDEP_ID         local_mdep_id;     /* local MDEP ID */
322     tBTA_HL_MDEP_ID         peer_mdep_id;      /* peer mdep id */
323     tBTA_HL_DCH_CFG         local_cfg;
324     tBTA_SEC                sec_mask;          /* security mask for initiating connection*/
325 } tBTA_HL_DCH_OPEN_PARAM;
326 
327 
328 typedef struct
329 {
330     UINT16                  ctrl_psm;
331     tBTA_HL_MDL_ID          mdl_id;
332 } tBTA_HL_DCH_RECONNECT_PARAM;
333 
334 
335 typedef struct
336 {
337     UINT16                  ctrl_psm;
338     UINT16                  pkt_size;
339     tBTA_HL_DCH_CFG         local_cfg;
340 } tBTA_HL_DCH_ECHO_TEST_PARAM;
341 
342 typedef struct
343 {
344     UINT16                  buf_size;
345     UINT8                   p_buf;        /* buffer pointer */
346 } tBTA_HL_DCH_BUF_INFO;
347 
348 typedef struct
349 {
350     tBTA_HL_MDEP_ID         local_mdep_id;  /* local MDEP ID */
351     tBTA_HL_MDL_ID          mdl_id;
352     tBTA_HL_DCH_CREATE_RSP  rsp_code;
353     tBTA_HL_DCH_CFG         cfg_rsp;
354 } tBTA_HL_DCH_CREATE_RSP_PARAM;
355 
356 typedef struct
357 {
358     UINT16              data_type;
359     UINT8               mdep_id;
360     tBTA_HL_MDEP_ROLE   mdep_role;
361     char                mdep_desp[BTA_HL_MDEP_DESP_LEN+1];
362 }tBTA_HL_SDP_MDEP_CFG;
363 
364 typedef struct
365 {
366     UINT16                  ctrl_psm;
367     UINT16                  data_psm;
368     UINT8                   mcap_sup_proc;
369     UINT8                   num_mdeps; /* number of mdep elements from SDP*/
370     char                    srv_name[BTA_SERVICE_NAME_LEN+1];
371     char                    srv_desp[BTA_SERVICE_DESP_LEN+1];
372     char                    provider_name[BTA_PROVIDER_NAME_LEN+1];
373     tBTA_HL_SDP_MDEP_CFG    mdep_cfg[BTA_HL_NUM_SDP_MDEPS];
374 } tBTA_HL_SDP_REC;
375 
376 typedef struct
377 {
378     UINT8                num_recs;
379     tBTA_HL_SDP_REC      sdp_rec[BTA_HL_NUM_SDP_RECS];
380 } tBTA_HL_SDP;
381 
382 /* HL control callback function events */
383 enum
384 {
385     BTA_HL_CTRL_ENABLE_CFM_EVT            = 0,
386     BTA_HL_CTRL_DISABLE_CFM_EVT
387 };
388 typedef UINT8 tBTA_HL_CTRL_EVT;
389 /* Structure associated with BTA_HL_ENABLE_EVT
390    BTA_HL_DISABLE_EVT */
391 
392 typedef struct
393 {
394     tBTA_HL_STATUS  status;
395 } tBTA_HL_CTRL_ENABLE_DISABLE;
396 
397 typedef union
398 {
399     tBTA_HL_CTRL_ENABLE_DISABLE  enable_cfm;
400     tBTA_HL_CTRL_ENABLE_DISABLE  disable_cfm;
401 } tBTA_HL_CTRL;
402 
403 /* HL instance callback function events */
404 enum
405 {
406     BTA_HL_REGISTER_CFM_EVT           =0,
407     BTA_HL_DEREGISTER_CFM_EVT,
408     BTA_HL_CCH_OPEN_IND_EVT,
409     BTA_HL_CCH_OPEN_CFM_EVT,
410     BTA_HL_CCH_CLOSE_IND_EVT,
411     BTA_HL_CCH_CLOSE_CFM_EVT,
412     BTA_HL_DCH_CREATE_IND_EVT,
413     BTA_HL_DCH_OPEN_IND_EVT,
414     BTA_HL_DCH_OPEN_CFM_EVT,
415     BTA_HL_DCH_CLOSE_IND_EVT,
416     BTA_HL_DCH_CLOSE_CFM_EVT,
417     BTA_HL_DCH_RECONNECT_IND_EVT,
418     BTA_HL_DCH_RECONNECT_CFM_EVT,
419 
420     BTA_HL_DCH_ABORT_IND_EVT,
421     BTA_HL_DCH_ABORT_CFM_EVT,
422     BTA_HL_DELETE_MDL_IND_EVT,
423     BTA_HL_DELETE_MDL_CFM_EVT,
424     BTA_HL_DCH_SEND_DATA_CFM_EVT,
425     BTA_HL_DCH_RCV_DATA_IND_EVT,
426     BTA_HL_CONG_CHG_IND_EVT,
427     BTA_HL_DCH_ECHO_TEST_CFM_EVT,
428     BTA_HL_SDP_QUERY_CFM_EVT,
429     BTA_HL_SDP_INFO_IND_EVT
430 };
431 typedef UINT8 tBTA_HL_EVT;
432 
433 
434 typedef struct
435 {
436     tBTA_HL_STATUS          status;        /* start status */
437     UINT8                   app_id;
438     tBTA_HL_APP_HANDLE      app_handle;
439 } tBTA_HL_REGISTER_CFM;
440 
441 
442 typedef struct
443 {
444     tBTA_HL_STATUS          status;        /* start status */
445     UINT8                   app_id;
446     tBTA_HL_APP_HANDLE      app_handle;
447 } tBTA_HL_DEREGISTER_CFM;
448 
449 
450 typedef struct
451 {
452     BOOLEAN                 intentional;
453     tBTA_HL_MCL_HANDLE      mcl_handle;
454     tBTA_HL_APP_HANDLE      app_handle;
455 } tBTA_HL_CCH_CLOSE_IND;
456 
457 
458 typedef struct
459 {
460     tBTA_HL_MCL_HANDLE      mcl_handle;
461     tBTA_HL_APP_HANDLE      app_handle;
462 } tBTA_HL_MCL_IND;
463 
464 typedef struct
465 {
466     tBTA_HL_STATUS          status;             /* connection status */
467     tBTA_HL_MCL_HANDLE      mcl_handle;
468     tBTA_HL_APP_HANDLE      app_handle;
469 } tBTA_HL_MCL_CFM;
470 
471 typedef struct
472 {
473     tBTA_HL_MCL_HANDLE      mcl_handle;
474     tBTA_HL_APP_HANDLE      app_handle;
475     BD_ADDR                 bd_addr; /* address of peer device */
476 } tBTA_HL_CCH_OPEN_IND;
477 
478 typedef struct
479 {
480     tBTA_HL_STATUS          status;             /* connection status */
481     UINT8                   app_id;
482     tBTA_HL_MCL_HANDLE      mcl_handle;
483     tBTA_HL_APP_HANDLE      app_handle;
484     BD_ADDR                 bd_addr;            /* address of peer device */
485 } tBTA_HL_CCH_OPEN_CFM;
486 
487 typedef struct
488 {
489     tBTA_HL_MCL_HANDLE      mcl_handle;
490     tBTA_HL_APP_HANDLE      app_handle;
491     tBTA_HL_MDEP_ID         local_mdep_id;
492     tBTA_HL_MDL_ID          mdl_id;             /* MCAP data link ID for this
493                                                    data channel conenction    */
494     tBTA_HL_DCH_CFG         cfg;                /* dch cfg requested by the peer device */
495     BD_ADDR                 bd_addr; /* address of peer device */
496 
497 } tBTA_HL_DCH_CREATE_IND;
498 
499 typedef struct
500 {
501     tBTA_HL_MDL_HANDLE      mdl_handle;
502     tBTA_HL_MCL_HANDLE      mcl_handle;
503     tBTA_HL_APP_HANDLE      app_handle;
504     tBTA_HL_MDEP_ID         local_mdep_id;
505     tBTA_HL_MDL_ID          mdl_id;             /* MCAP data link ID for this
506                                                    data channel conenction    */
507     tBTA_HL_DCH_MODE        dch_mode;           /* data channel mode - reliable or streaming*/
508 
509     BOOLEAN                 first_reliable;  /* whether this is the first reliable data channel */
510     UINT16                  mtu;
511 } tBTA_HL_DCH_OPEN_IND;
512 
513 typedef struct
514 {
515     tBTA_HL_STATUS          status;             /* connection status */
516     tBTA_HL_MDL_HANDLE      mdl_handle;
517     tBTA_HL_MCL_HANDLE      mcl_handle;
518     tBTA_HL_APP_HANDLE      app_handle;
519     tBTA_HL_MDEP_ID         local_mdep_id;
520     tBTA_HL_MDL_ID          mdl_id;             /* MCAP data link ID for this
521                                                    data channel conenction    */
522     tBTA_HL_DCH_MODE        dch_mode;           /* data channel mode - reliable or streaming*/
523     BOOLEAN                 first_reliable;     /* whether this is the first reliable data channel */
524     UINT16                  mtu;
525 } tBTA_HL_DCH_OPEN_CFM;
526 
527 
528 typedef struct
529 {
530     BOOLEAN                 intentional;
531     tBTA_HL_MDL_HANDLE      mdl_handle;
532     tBTA_HL_MCL_HANDLE      mcl_handle;
533     tBTA_HL_APP_HANDLE      app_handle;
534 } tBTA_HL_DCH_CLOSE_IND;
535 
536 
537 typedef struct
538 {
539     tBTA_HL_MDL_HANDLE      mdl_handle;
540     tBTA_HL_MCL_HANDLE      mcl_handle;
541     tBTA_HL_APP_HANDLE      app_handle;
542 } tBTA_HL_MDL_IND;
543 
544 typedef struct
545 {
546     tBTA_HL_STATUS          status;
547     tBTA_HL_MDL_HANDLE      mdl_handle;
548     tBTA_HL_MCL_HANDLE      mcl_handle;
549     tBTA_HL_APP_HANDLE      app_handle;
550 } tBTA_HL_MDL_CFM;
551 
552 typedef struct
553 {
554     tBTA_HL_MCL_HANDLE      mcl_handle;
555     tBTA_HL_APP_HANDLE      app_handle;
556     tBTA_HL_MDL_ID          mdl_id;
557 } tBTA_HL_DELETE_MDL_IND;
558 
559 typedef struct
560 {
561     tBTA_HL_STATUS          status;
562     tBTA_HL_MCL_HANDLE      mcl_handle;
563     tBTA_HL_APP_HANDLE      app_handle;
564     tBTA_HL_MDL_ID          mdl_id;
565 } tBTA_HL_DELETE_MDL_CFM;
566 
567 typedef struct
568 {
569     tBTA_HL_MDL_HANDLE      mdl_handle;
570     tBTA_HL_MCL_HANDLE      mcl_handle;
571     tBTA_HL_APP_HANDLE      app_handle;
572     BOOLEAN                 cong;
573 } tBTA_HL_DCH_CONG_IND;
574 
575 typedef struct
576 {
577     tBTA_HL_APP_HANDLE      app_handle;
578     UINT16                  ctrl_psm;
579     UINT16                  data_psm;
580     UINT8                   data_x_spec;
581     UINT8                   mcap_sup_procs;
582 } tBTA_HL_SDP_INFO_IND;
583 
584 typedef struct
585 {
586     tBTA_HL_STATUS          status;
587     UINT8                   app_id;
588     tBTA_HL_APP_HANDLE      app_handle;
589     BD_ADDR                 bd_addr;
590     tBTA_HL_SDP             *p_sdp;
591 } tBTA_HL_SDP_QUERY_CFM;
592 
593 typedef union
594 {
595     tBTA_HL_REGISTER_CFM        reg_cfm;
596     tBTA_HL_DEREGISTER_CFM      dereg_cfm;
597     tBTA_HL_CCH_OPEN_IND        cch_open_ind;
598     tBTA_HL_CCH_OPEN_CFM        cch_open_cfm;
599     tBTA_HL_CCH_CLOSE_IND       cch_close_ind;
600     tBTA_HL_MCL_CFM             cch_close_cfm;
601     tBTA_HL_DCH_CREATE_IND      dch_create_ind;
602     tBTA_HL_DCH_OPEN_IND        dch_open_ind;
603     tBTA_HL_DCH_OPEN_CFM        dch_open_cfm;
604     tBTA_HL_DCH_CLOSE_IND       dch_close_ind;
605     tBTA_HL_MDL_CFM             dch_close_cfm;
606     tBTA_HL_DCH_OPEN_IND        dch_reconnect_ind;
607     tBTA_HL_DCH_OPEN_CFM        dch_reconnect_cfm;
608     tBTA_HL_MCL_IND             dch_abort_ind;
609     tBTA_HL_MCL_CFM             dch_abort_cfm;
610     tBTA_HL_DELETE_MDL_IND      delete_mdl_ind;
611     tBTA_HL_DELETE_MDL_CFM      delete_mdl_cfm;
612     tBTA_HL_MDL_CFM             dch_send_data_cfm;
613     tBTA_HL_MDL_IND             dch_rcv_data_ind;
614     tBTA_HL_DCH_CONG_IND        dch_cong_ind;
615     tBTA_HL_MCL_CFM             echo_test_cfm;
616     tBTA_HL_SDP_QUERY_CFM       sdp_query_cfm;
617     tBTA_HL_SDP_INFO_IND        sdp_info_ind;
618 
619 } tBTA_HL;
620 
621 /* HL callback functions */
622 typedef void tBTA_HL_CTRL_CBACK(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data);
623 typedef void tBTA_HL_CBACK(tBTA_HL_EVT event, tBTA_HL *p_data);
624 
625 
626 /*****************************************************************************
627 **  External Function Declarations
628 *****************************************************************************/
629 #ifdef __cplusplus
630 extern "C"
631 {
632 #endif
633 
634 /**************************
635 **  API Functions
636 ***************************/
637 
638 /*******************************************************************************
639 **
640 ** Function         BTA_HlEnable
641 **
642 ** Description      Enable the HL subsystems.  This function must be
643 **                  called before any other functions in the HL API are called.
644 **                  When the enable operation is completed the callback function
645 **                  will be called with an BTA_HL_CTRL_ENABLE_CFM_EVT event.
646 **
647 ** Parameters       p_cback - HL event call back function
648 **
649 ** Returns          void
650 **
651 *******************************************************************************/
652 extern void BTA_HlEnable(tBTA_HL_CTRL_CBACK *p_ctrl_cback);
653 /*******************************************************************************
654 **
655 ** Function         BTA_HlDisable
656 **
657 ** Description     Disable the HL subsystem.
658 **
659 ** Returns          void
660 **
661 *******************************************************************************/
662 extern void BTA_HlDisable(void);
663 
664 /*******************************************************************************
665 **
666 ** Function         BTA_HlUpdate
667 **
668 ** Description      Register an HDP application
669 **
670 ** Parameters       app_id        - Application ID
671 **                  p_reg_param   - non-platform related parameters for the
672 **                                  HDP application
673 **                  p_cback       - HL event callback fucntion
674 **
675 ** Returns          void
676 **
677 *******************************************************************************/
678 extern void BTA_HlUpdate(UINT8  app_id,
679                          tBTA_HL_REG_PARAM *p_reg_param, BOOLEAN is_register,
680                          tBTA_HL_CBACK *p_cback);
681 
682 /*******************************************************************************
683 **
684 ** Function         BTA_HlRegister
685 **
686 ** Description      Register a HDP application
687 **
688 **
689 ** Parameters       app_id        - hdp application ID
690 **                  p_reg_param   - non-platform related parameters for the
691 **                                  HDP application
692 **                  p_cback       - HL event callback fucntion
693 **
694 ** Returns          void
695 **
696 *******************************************************************************/
697 extern void BTA_HlRegister(UINT8  app_id,
698                            tBTA_HL_REG_PARAM *p_reg_param,
699                            tBTA_HL_CBACK *p_cback);
700 
701 /*******************************************************************************
702 **
703 ** Function         BTA_HlDeregister
704 **
705 ** Description      Deregister an HDP application
706 **
707 ** Parameters       app_handle - Application handle
708 **
709 ** Returns         void
710 **
711 *******************************************************************************/
712 extern void BTA_HlDeregister(UINT8 app_id,tBTA_HL_APP_HANDLE app_handle);
713 
714 /*******************************************************************************
715 **
716 ** Function         BTA_HlCchOpen
717 **
718 ** Description      Open a Control channel connection with the specified BD address
719 **                  and the control PSM value is used to select which
720 **                  HDP insatnce should be used in case the peer device support
721 **                  multiple HDP instances.
722 **
723 **
724 ** Parameters       app_handle - Application Handle
725 **                  p_open_param - parameters for opening a control channel
726 **
727 ** Returns          void
728 **
729 **                  Note: If the control PSM value is zero then the first HDP
730 **                        instance is used for the control channel setup
731 *******************************************************************************/
732 extern void BTA_HlCchOpen(UINT8 app_id, tBTA_HL_APP_HANDLE app_handle,
733                           tBTA_HL_CCH_OPEN_PARAM *p_open_param);
734 
735 /*******************************************************************************
736 **
737 ** Function         BTA_HlCchClose
738 **
739 ** Description      Close a Control channel connection with the specified MCL
740 **                  handle
741 **
742 ** Parameters       mcl_handle - MCL handle
743 **
744 ** Returns          void
745 **
746 *******************************************************************************/
747 extern  void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle);
748 
749 /*******************************************************************************
750 **
751 ** Function         BTA_HlDchOpen
752 **
753 ** Description      Open a data channel connection with the specified DCH parameters
754 **
755 ** Parameters       mcl_handle - MCL handle
756 **                  p_open_param - parameters for opening a data channel
757 **
758 ** Returns          void
759 **
760 *******************************************************************************/
761 extern  void BTA_HlDchOpen(tBTA_HL_MCL_HANDLE mcl_handle,
762                            tBTA_HL_DCH_OPEN_PARAM *p_open_param);
763 /*******************************************************************************
764 **
765 ** Function         BTA_HlDchReconnect
766 **
767 ** Description      Reconnect a data channel with the specified MDL_ID
768 **
769 ** Parameters       mcl_handle      - MCL handle
770 *8                  p_recon_param   - parameters for reconnecting a data channel
771 **
772 ** Returns          void
773 **
774 *******************************************************************************/
775 extern void BTA_HlDchReconnect(tBTA_HL_MCL_HANDLE mcl_handle,
776                                tBTA_HL_DCH_RECONNECT_PARAM *p_recon_param);
777 /*******************************************************************************
778 **
779 ** Function         BTA_HlDchClose
780 **
781 ** Description      Close a data channel with the specified MDL handle
782 **
783 ** Parameters       mdl_handle  - MDL handle
784 **
785 ** Returns          void
786 **
787 *******************************************************************************/
788 extern void BTA_HlDchClose(tBTA_HL_MDL_HANDLE mdl_handle);
789 
790 /*******************************************************************************
791 **
792 ** Function         BTA_HlDchAbort
793 **
794 ** Description      Abort the current data channel setup with the specified MCL
795 **                  handle
796 **
797 ** Parameters       mcl_handle  - MCL handle
798 **
799 **
800 ** Returns          void
801 **
802 *******************************************************************************/
803 extern void BTA_HlDchAbort(tBTA_HL_MCL_HANDLE mcl_handle);
804 
805 /*******************************************************************************
806 **
807 ** Function         BTA_HlSendData
808 **
809 ** Description      Send an APDU to the peer device
810 **
811 ** Parameters       mdl_handle  - MDL handle
812 **                  pkt_size    - size of the data packet to be sent
813 **
814 ** Returns          void
815 **
816 *******************************************************************************/
817 extern void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle,
818                            UINT16           pkt_size);
819 
820 /*******************************************************************************
821 **
822 ** Function         BTA_HlDeleteMdl
823 **
824 ** Description      Delete the specified MDL_ID within the specified MCL handle
825 **
826 ** Parameters       mcl_handle  - MCL handle
827 **                  mdl_id      - MDL ID
828 **
829 ** Returns          void
830 **
831 **                  note: If mdl_id = 0xFFFF then this means to delete all MDLs
832 **                        and this value can only be used with DeleteMdl request only
833 **                        not other requests
834 **
835 *******************************************************************************/
836 extern void BTA_HlDeleteMdl(tBTA_HL_MCL_HANDLE mcl_handle,
837                             tBTA_HL_MDL_ID mdl_id );
838 
839 /*******************************************************************************
840 **
841 ** Function         BTA_HlDchEchoTest
842 **
843 ** Description      Initiate an echo test with the specified MCL handle
844 **
845 ** Parameters       mcl_handle           - MCL handle
846 *8                  p_echo_test_param   -  parameters for echo testing
847 **
848 ** Returns          void
849 **
850 *******************************************************************************/
851 extern void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE  mcl_handle,
852                                tBTA_HL_DCH_ECHO_TEST_PARAM *p_echo_test_param);
853 
854 /*******************************************************************************
855 **
856 ** Function         BTA_HlSdpQuery
857 **
858 ** Description      SDP query request for the specified BD address
859 **
860 ** Parameters       app_id
861                         app_handle      - application handle
862 **                  bd_addr         - BD address
863 **
864 ** Returns          void
865 **
866 *******************************************************************************/
867 extern  void BTA_HlSdpQuery(UINT8  app_id,tBTA_HL_APP_HANDLE app_handle,
868                             BD_ADDR bd_addr);
869 
870 /*******************************************************************************
871 **
872 ** Function         BTA_HlDchCreateMdlRsp
873 **
874 ** Description      Set the Response and configuration values for the Create MDL
875 **                  request
876 **
877 ** Parameters       mcl_handle  - MCL handle
878 **                  p_rsp_param - parameters specified whether the request should
879 **                                be accepted or not and if it should be accepted
880 **                                then it also specified the configuration response
881 **                                value
882 **
883 ** Returns          void
884 **
885 *******************************************************************************/
886 extern void BTA_HlDchCreateRsp(tBTA_HL_MCL_HANDLE mcl_handle,
887                                tBTA_HL_DCH_CREATE_RSP_PARAM *p_rsp_param);
888 
889 
890 
891 #ifdef __cplusplus
892 
893 }
894 #endif
895 
896 #endif /* BTA_HL_API_H */
897