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*******************************************************************************/
653    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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    BTA_API 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
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936