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