• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright 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_pan_api.h"
28 #include "bta_sys.h"
29 #include "osi/include/fixed_queue.h"
30 
31 /*****************************************************************************
32  *  Constants
33  ****************************************************************************/
34 
35 /* PAN events */
36 enum {
37   /* these events are handled by the state machine */
38   BTA_PAN_API_CLOSE_EVT = BTA_SYS_EVT_START(BTA_ID_PAN),
39   BTA_PAN_CI_TX_READY_EVT,
40   BTA_PAN_CI_RX_READY_EVT,
41   BTA_PAN_CI_TX_FLOW_EVT,
42   BTA_PAN_CI_RX_WRITE_EVT,
43   BTA_PAN_CI_RX_WRITEBUF_EVT,
44   BTA_PAN_CONN_OPEN_EVT,
45   BTA_PAN_CONN_CLOSE_EVT,
46   BTA_PAN_BNEP_FLOW_ENABLE_EVT,
47   BTA_PAN_RX_FROM_BNEP_READY_EVT,
48 
49   /* these events are handled outside of the state machine */
50   BTA_PAN_API_ENABLE_EVT,
51   BTA_PAN_API_DISABLE_EVT,
52   BTA_PAN_API_SET_ROLE_EVT,
53   BTA_PAN_API_OPEN_EVT
54 };
55 
56 /* state machine states */
57 enum { BTA_PAN_IDLE_ST, BTA_PAN_OPEN_ST, BTA_PAN_CLOSING_ST };
58 
59 /*****************************************************************************
60  *  Data types
61  ****************************************************************************/
62 
63 /* data type for BTA_PAN_API_ENABLE_EVT */
64 typedef struct {
65   BT_HDR hdr;              /* Event header */
66   tBTA_PAN_CBACK* p_cback; /* PAN callback function */
67 } tBTA_PAN_API_ENABLE;
68 
69 /* data type for BTA_PAN_API_REG_ROLE_EVT */
70 typedef struct {
71   BT_HDR hdr;                               /* Event header */
72   char user_name[BTA_SERVICE_NAME_LEN + 1]; /* Service name */
73   char gn_name[BTA_SERVICE_NAME_LEN + 1];   /* Service name */
74   char nap_name[BTA_SERVICE_NAME_LEN + 1];  /* Service name */
75   tBTA_PAN_ROLE role;
76   uint8_t user_app_id;
77   uint8_t gn_app_id;
78   uint8_t nap_app_id;
79   tBTA_SEC user_sec_mask; /* Security mask */
80   tBTA_SEC gn_sec_mask;   /* Security mask */
81   tBTA_SEC nap_sec_mask;  /* Security mask */
82 
83 } tBTA_PAN_API_SET_ROLE;
84 
85 /* data type for BTA_PAN_API_OPEN_EVT */
86 typedef struct {
87   BT_HDR hdr;               /* Event header */
88   tBTA_PAN_ROLE local_role; /* local role */
89   tBTA_PAN_ROLE peer_role;  /* peer role */
90   RawAddress bd_addr;       /* peer bdaddr */
91 } tBTA_PAN_API_OPEN;
92 
93 /* data type for BTA_PAN_CI_TX_FLOW_EVT */
94 typedef struct {
95   BT_HDR hdr;  /* Event header */
96   bool enable; /* Flow control setting */
97 } tBTA_PAN_CI_TX_FLOW;
98 
99 /* data type for BTA_PAN_CONN_OPEN_EVT */
100 typedef struct {
101   BT_HDR hdr; /* Event header */
102   tPAN_RESULT result;
103 
104 } tBTA_PAN_CONN;
105 
106 /* union of all data types */
107 typedef union {
108   BT_HDR hdr;
109   tBTA_PAN_API_ENABLE api_enable;
110   tBTA_PAN_API_SET_ROLE api_set_role;
111   tBTA_PAN_API_OPEN api_open;
112   tBTA_PAN_CI_TX_FLOW ci_tx_flow;
113   tBTA_PAN_CONN conn;
114 } tBTA_PAN_DATA;
115 
116 /* state machine control block */
117 typedef struct {
118   RawAddress bd_addr; /* peer bdaddr */
119   fixed_queue_t*
120       data_queue;    /* Queue of buffers waiting to be passed to application */
121   uint16_t handle;   /* BTA PAN/BNEP handle */
122   bool in_use;       /* scb in use */
123   tBTA_SEC sec_mask; /* Security mask */
124   bool pan_flow_enable;     /* BNEP flow control state */
125   bool app_flow_enable;     /* Application flow control state */
126   uint8_t state;            /* State machine state */
127   tBTA_PAN_ROLE local_role; /* local role */
128   tBTA_PAN_ROLE peer_role;  /* peer role */
129   uint8_t app_id;           /* application id for the connection */
130 
131 } tBTA_PAN_SCB;
132 
133 /* main control block */
134 typedef struct {
135   tBTA_PAN_SCB scb[BTA_PAN_NUM_CONN]; /* state machine control blocks */
136   tBTA_PAN_CBACK* p_cback;            /* PAN callback function */
137   uint8_t app_id[3];                  /* application id for PAN roles */
138   uint8_t flow_mask;                  /* Data flow mask */
139   uint8_t q_level; /* queue level set by application for TX data */
140 
141 } tBTA_PAN_CB;
142 
143 /* pan data param */
144 typedef struct {
145   BT_HDR hdr;
146   RawAddress src;
147   RawAddress dst;
148   uint16_t protocol;
149   bool ext;
150   bool forward;
151 
152 } tBTA_PAN_DATA_PARAMS;
153 
154 /*****************************************************************************
155  *  Global data
156  ****************************************************************************/
157 
158 /* PAN control block */
159 extern tBTA_PAN_CB bta_pan_cb;
160 
161 /*****************************************************************************
162  *  Function prototypes
163  ****************************************************************************/
164 extern tBTA_PAN_SCB* bta_pan_scb_alloc(void);
165 extern void bta_pan_scb_dealloc(tBTA_PAN_SCB* p_scb);
166 extern uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB* p_scb);
167 extern tBTA_PAN_SCB* bta_pan_scb_by_handle(uint16_t handle);
168 extern bool bta_pan_hdl_event(BT_HDR* p_msg);
169 
170 /* action functions */
171 extern void bta_pan_enable(tBTA_PAN_DATA* p_data);
172 extern void bta_pan_disable(void);
173 extern void bta_pan_set_role(tBTA_PAN_DATA* p_data);
174 extern void bta_pan_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
175 extern void bta_pan_api_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
176 extern void bta_pan_set_shutdown(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
177 extern void bta_pan_rx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
178 extern void bta_pan_tx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
179 extern void bta_pan_tx_flow(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
180 extern void bta_pan_conn_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
181 extern void bta_pan_conn_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
182 extern void bta_pan_writebuf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
183 extern void bta_pan_write_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
184 extern void bta_pan_free_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
185 
186 #endif /* BTA_PAN_INT_H */
187