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
142typedef UINT8 tBTA_HL_STATUS;
143typedef tMCA_HANDLE tBTA_HL_APP_HANDLE;
144typedef tMCA_CL     tBTA_HL_MCL_HANDLE;
145typedef tMCA_DL     tBTA_HL_MDL_HANDLE;
146enum
147{
148    BTA_HL_DEVICE_TYPE_SINK,
149    BTA_HL_DEVICE_TYPE_SOURCE,
150    BTA_HL_DEVICE_TYPE_DUAL
151};
152
153typedef 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
171typedef 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
175typedef 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
182typedef 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
189typedef 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
199typedef 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
206typedef 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
214typedef 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
221typedef UINT8 tBTA_HL_SUP_PROC_MASK;
222
223typedef 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
230typedef 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
239typedef 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
246typedef 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
253typedef 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
262typedef 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
269typedef 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 */
287typedef 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
295typedef 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
302typedef 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
311typedef 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
319typedef 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
329typedef struct
330{
331    UINT16                  ctrl_psm;
332    tBTA_HL_MDL_ID          mdl_id;
333} tBTA_HL_DCH_RECONNECT_PARAM;
334
335
336typedef 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
343typedef struct
344{
345    UINT16                  buf_size;
346    UINT8                   p_buf;        /* buffer pointer */
347} tBTA_HL_DCH_BUF_INFO;
348
349typedef 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
357typedef 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
365typedef 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
377typedef 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 */
384enum
385{
386    BTA_HL_CTRL_ENABLE_CFM_EVT            = 0,
387    BTA_HL_CTRL_DISABLE_CFM_EVT
388};
389typedef UINT8 tBTA_HL_CTRL_EVT;
390/* Structure associated with BTA_HL_ENABLE_EVT
391   BTA_HL_DISABLE_EVT */
392
393typedef struct
394{
395    tBTA_HL_STATUS  status;
396} tBTA_HL_CTRL_ENABLE_DISABLE;
397
398typedef 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 */
405enum
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};
432typedef UINT8 tBTA_HL_EVT;
433
434
435typedef 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
443typedef 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
451typedef 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
459typedef struct
460{
461    tBTA_HL_MCL_HANDLE      mcl_handle;
462    tBTA_HL_APP_HANDLE      app_handle;
463} tBTA_HL_MCL_IND;
464
465typedef 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
472typedef 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
479typedef 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
488typedef 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
500typedef 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
514typedef 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
529typedef 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
538typedef 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
545typedef 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
553typedef 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
560typedef 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
568typedef 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
576typedef 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
585typedef 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
594typedef 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 */
623typedef void tBTA_HL_CTRL_CBACK(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data);
624typedef void tBTA_HL_CBACK(tBTA_HL_EVT event, tBTA_HL *p_data);
625
626
627/*****************************************************************************
628**  External Function Declarations
629*****************************************************************************/
630#ifdef __cplusplus
631extern "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*******************************************************************************/
653extern 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*******************************************************************************/
663extern 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*******************************************************************************/
679extern 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*******************************************************************************/
698extern 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*******************************************************************************/
713extern 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*******************************************************************************/
733extern 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*******************************************************************************/
748extern  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*******************************************************************************/
762extern  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*******************************************************************************/
776extern 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*******************************************************************************/
789extern 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*******************************************************************************/
804extern 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*******************************************************************************/
818extern 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*******************************************************************************/
837extern 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*******************************************************************************/
852extern 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*******************************************************************************/
868extern  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*******************************************************************************/
887extern 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