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