1 /******************************************************************************
2  *
3  *  Copyright (C) 2004-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This is the private interface file for the BTA data gateway.
22  *
23  ******************************************************************************/
24 #ifndef BTA_PAN_INT_H
25 #define BTA_PAN_INT_H
26 
27 #include "bta_sys.h"
28 #include "bta_pan_api.h"
29 
30 /*****************************************************************************
31 **  Constants
32 *****************************************************************************/
33 
34 
35 
36 
37 /* PAN events */
38 enum
39 {
40     /* these events are handled by the state machine */
41     BTA_PAN_API_CLOSE_EVT = BTA_SYS_EVT_START(BTA_ID_PAN),
42     BTA_PAN_CI_TX_READY_EVT,
43     BTA_PAN_CI_RX_READY_EVT,
44     BTA_PAN_CI_TX_FLOW_EVT,
45     BTA_PAN_CI_RX_WRITE_EVT,
46     BTA_PAN_CI_RX_WRITEBUF_EVT,
47     BTA_PAN_CONN_OPEN_EVT,
48     BTA_PAN_CONN_CLOSE_EVT,
49     BTA_PAN_BNEP_FLOW_ENABLE_EVT,
50     BTA_PAN_RX_FROM_BNEP_READY_EVT,
51 
52     /* these events are handled outside of the state machine */
53     BTA_PAN_API_ENABLE_EVT,
54     BTA_PAN_API_DISABLE_EVT,
55     BTA_PAN_API_SET_ROLE_EVT,
56     BTA_PAN_API_OPEN_EVT
57 };
58 
59 /* state machine states */
60 enum
61 {
62     BTA_PAN_IDLE_ST,
63     BTA_PAN_OPEN_ST,
64     BTA_PAN_CLOSING_ST
65 };
66 
67 
68 
69 
70 /*****************************************************************************
71 **  Data types
72 *****************************************************************************/
73 
74 /* data type for BTA_PAN_API_ENABLE_EVT */
75 typedef struct
76 {
77     BT_HDR              hdr;                        /* Event header */
78     tBTA_PAN_CBACK     *p_cback;                    /* PAN callback function */
79 } tBTA_PAN_API_ENABLE;
80 
81 /* data type for BTA_PAN_API_REG_ROLE_EVT */
82 typedef struct
83 {
84     BT_HDR              hdr;                             /* Event header */
85     char                user_name[BTA_SERVICE_NAME_LEN+1];   /* Service name */
86     char                gn_name[BTA_SERVICE_NAME_LEN+1];     /* Service name */
87     char                nap_name[BTA_SERVICE_NAME_LEN+1];    /* Service name */
88     tBTA_PAN_ROLE       role;
89     UINT8               user_app_id;
90     UINT8               gn_app_id;
91     UINT8               nap_app_id;
92     tBTA_SEC            user_sec_mask;                   /* Security mask */
93     tBTA_SEC            gn_sec_mask;                     /* Security mask */
94     tBTA_SEC            nap_sec_mask;                    /* Security mask */
95 
96 
97 } tBTA_PAN_API_SET_ROLE;
98 
99 /* data type for BTA_PAN_API_OPEN_EVT */
100 typedef struct
101 {
102     BT_HDR              hdr;                        /* Event header */
103     tBTA_PAN_ROLE        local_role;                 /* local role */
104     tBTA_PAN_ROLE        peer_role;                  /* peer role */
105     BD_ADDR             bd_addr;                    /* peer bdaddr */
106 } tBTA_PAN_API_OPEN;
107 
108 /* data type for BTA_PAN_CI_TX_FLOW_EVT */
109 typedef struct
110 {
111     BT_HDR          hdr;                    /* Event header */
112     BOOLEAN         enable;                 /* Flow control setting */
113 } tBTA_PAN_CI_TX_FLOW;
114 
115 /* data type for BTA_PAN_CONN_OPEN_EVT */
116 typedef struct
117 {
118     BT_HDR          hdr;        /* Event header */
119     tPAN_RESULT     result;
120 
121 } tBTA_PAN_CONN;
122 
123 
124 
125 
126 /* union of all data types */
127 typedef union
128 {
129     BT_HDR                   hdr;
130     tBTA_PAN_API_ENABLE      api_enable;
131     tBTA_PAN_API_SET_ROLE    api_set_role;
132     tBTA_PAN_API_OPEN        api_open;
133     tBTA_PAN_CI_TX_FLOW      ci_tx_flow;
134     tBTA_PAN_CONN            conn;
135 } tBTA_PAN_DATA;
136 
137 /* state machine control block */
138 typedef struct
139 {
140     BD_ADDR                 bd_addr;        /* peer bdaddr */
141     BUFFER_Q                data_queue;     /* Queue of buffers waiting to be passed to application */
142     UINT16                  handle;         /* BTA PAN/BNEP handle */
143     BOOLEAN                 in_use;         /* scb in use */
144     tBTA_SEC                sec_mask;       /* Security mask */
145     BOOLEAN                 pan_flow_enable;/* BNEP flow control state */
146     BOOLEAN                 app_flow_enable;/* Application flow control state */
147     UINT8                   state;          /* State machine state */
148     tBTA_PAN_ROLE            local_role;     /* local role */
149     tBTA_PAN_ROLE            peer_role;      /* peer role */
150     UINT8                    app_id;         /* application id for the connection */
151 
152 } tBTA_PAN_SCB;
153 
154 
155 
156 /* main control block */
157 typedef struct
158 {
159     tBTA_PAN_SCB    scb[BTA_PAN_NUM_CONN];          /* state machine control blocks */
160     tBTA_PAN_CBACK *p_cback;                        /* PAN callback function */
161     UINT8            app_id[3];                      /* application id for PAN roles */
162     UINT8           flow_mask;                      /* Data flow mask */
163     UINT8           q_level;                        /* queue level set by application for TX data */
164 
165 } tBTA_PAN_CB;
166 
167 
168 /* pan data param */
169 typedef struct
170 {
171     BT_HDR  hdr;
172     BD_ADDR src;
173     BD_ADDR dst;
174     UINT16  protocol;
175     BOOLEAN ext;
176     BOOLEAN forward;
177 
178 } tBTA_PAN_DATA_PARAMS;
179 
180 
181 /*****************************************************************************
182 **  Global data
183 *****************************************************************************/
184 
185 /* PAN control block */
186 
187 #if BTA_DYNAMIC_MEMORY == FALSE
188 extern tBTA_PAN_CB  bta_pan_cb;
189 #else
190 extern tBTA_PAN_CB *bta_pan_cb_ptr;
191 #define bta_pan_cb (*bta_pan_cb_ptr)
192 #endif
193 
194 /*****************************************************************************
195 **  Function prototypes
196 *****************************************************************************/
197 extern tBTA_PAN_SCB *bta_pan_scb_alloc(void);
198 extern void bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb);
199 extern UINT8 bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb);
200 extern tBTA_PAN_SCB *bta_pan_scb_by_handle(UINT16 handle);
201 extern BOOLEAN bta_pan_hdl_event(BT_HDR *p_msg);
202 
203 /* action functions */
204 extern void bta_pan_enable(tBTA_PAN_DATA *p_data);
205 extern void bta_pan_disable(void);
206 extern void bta_pan_set_role(tBTA_PAN_DATA *p_data);
207 extern void bta_pan_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
208 extern void bta_pan_api_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
209 extern void bta_pan_set_shutdown(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
210 extern void bta_pan_rx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
211 extern void bta_pan_tx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
212 extern void bta_pan_tx_flow(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
213 extern void bta_pan_conn_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
214 extern void bta_pan_conn_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
215 extern void bta_pan_writebuf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
216 extern void bta_pan_write_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
217 extern void bta_pan_free_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
218 
219 
220 #endif /* BTA_PAN_INT_H */
221