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 60 61 62 /***************************************************************************** 63 ** Data types 64 *****************************************************************************/ 65 66 /* data type for BTA_PAN_API_ENABLE_EVT */ 67 typedef struct 68 { 69 BT_HDR hdr; /* Event header */ 70 tBTA_PAN_CBACK *p_cback; /* PAN callback function */ 71 } tBTA_PAN_API_ENABLE; 72 73 /* data type for BTA_PAN_API_REG_ROLE_EVT */ 74 typedef struct 75 { 76 BT_HDR hdr; /* Event header */ 77 char user_name[BTA_SERVICE_NAME_LEN+1]; /* Service name */ 78 char gn_name[BTA_SERVICE_NAME_LEN+1]; /* Service name */ 79 char nap_name[BTA_SERVICE_NAME_LEN+1]; /* Service name */ 80 tBTA_PAN_ROLE role; 81 UINT8 user_app_id; 82 UINT8 gn_app_id; 83 UINT8 nap_app_id; 84 tBTA_SEC user_sec_mask; /* Security mask */ 85 tBTA_SEC gn_sec_mask; /* Security mask */ 86 tBTA_SEC nap_sec_mask; /* Security mask */ 87 88 89 } tBTA_PAN_API_SET_ROLE; 90 91 /* data type for BTA_PAN_API_OPEN_EVT */ 92 typedef struct 93 { 94 BT_HDR hdr; /* Event header */ 95 tBTA_PAN_ROLE local_role; /* local role */ 96 tBTA_PAN_ROLE peer_role; /* peer role */ 97 BD_ADDR bd_addr; /* peer bdaddr */ 98 } tBTA_PAN_API_OPEN; 99 100 /* data type for BTA_PAN_CI_TX_FLOW_EVT */ 101 typedef struct 102 { 103 BT_HDR hdr; /* Event header */ 104 BOOLEAN enable; /* Flow control setting */ 105 } tBTA_PAN_CI_TX_FLOW; 106 107 /* data type for BTA_PAN_CONN_OPEN_EVT */ 108 typedef struct 109 { 110 BT_HDR hdr; /* Event header */ 111 tPAN_RESULT result; 112 113 } tBTA_PAN_CONN; 114 115 116 117 118 /* union of all data types */ 119 typedef union 120 { 121 BT_HDR hdr; 122 tBTA_PAN_API_ENABLE api_enable; 123 tBTA_PAN_API_SET_ROLE api_set_role; 124 tBTA_PAN_API_OPEN api_open; 125 tBTA_PAN_CI_TX_FLOW ci_tx_flow; 126 tBTA_PAN_CONN conn; 127 } tBTA_PAN_DATA; 128 129 /* state machine control block */ 130 typedef struct 131 { 132 BD_ADDR bd_addr; /* peer bdaddr */ 133 BUFFER_Q data_queue; /* Queue of buffers waiting to be passed to application */ 134 UINT16 handle; /* BTA PAN/BNEP handle */ 135 BOOLEAN in_use; /* scb in use */ 136 tBTA_SEC sec_mask; /* Security mask */ 137 BOOLEAN pan_flow_enable;/* BNEP flow control state */ 138 BOOLEAN app_flow_enable;/* Application flow control state */ 139 UINT8 state; /* State machine state */ 140 tBTA_PAN_ROLE local_role; /* local role */ 141 tBTA_PAN_ROLE peer_role; /* peer role */ 142 UINT8 app_id; /* application id for the connection */ 143 144 } tBTA_PAN_SCB; 145 146 147 148 /* main control block */ 149 typedef struct 150 { 151 tBTA_PAN_SCB scb[BTA_PAN_NUM_CONN]; /* state machine control blocks */ 152 tBTA_PAN_CBACK *p_cback; /* PAN callback function */ 153 UINT8 app_id[3]; /* application id for PAN roles */ 154 UINT8 flow_mask; /* Data flow mask */ 155 UINT8 q_level; /* queue level set by application for TX data */ 156 157 } tBTA_PAN_CB; 158 159 160 /* pan data param */ 161 typedef struct 162 { 163 BT_HDR hdr; 164 BD_ADDR src; 165 BD_ADDR dst; 166 UINT16 protocol; 167 BOOLEAN ext; 168 BOOLEAN forward; 169 170 } tBTA_PAN_DATA_PARAMS; 171 172 173 /***************************************************************************** 174 ** Global data 175 *****************************************************************************/ 176 177 /* PAN control block */ 178 179 #if BTA_DYNAMIC_MEMORY == FALSE 180 extern tBTA_PAN_CB bta_pan_cb; 181 #else 182 extern tBTA_PAN_CB *bta_pan_cb_ptr; 183 #define bta_pan_cb (*bta_pan_cb_ptr) 184 #endif 185 186 /***************************************************************************** 187 ** Function prototypes 188 *****************************************************************************/ 189 extern tBTA_PAN_SCB *bta_pan_scb_alloc(void); 190 extern void bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb); 191 extern UINT8 bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb); 192 extern tBTA_PAN_SCB *bta_pan_scb_by_handle(UINT16 handle); 193 extern BOOLEAN bta_pan_hdl_event(BT_HDR *p_msg); 194 195 /* action functions */ 196 extern void bta_pan_enable(tBTA_PAN_DATA *p_data); 197 extern void bta_pan_disable(void); 198 extern void bta_pan_set_role(tBTA_PAN_DATA *p_data); 199 extern void bta_pan_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 200 extern void bta_pan_api_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 201 extern void bta_pan_set_shutdown(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 202 extern void bta_pan_rx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 203 extern void bta_pan_tx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 204 extern void bta_pan_tx_flow(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 205 extern void bta_pan_conn_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 206 extern void bta_pan_conn_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 207 extern void bta_pan_writebuf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 208 extern void bta_pan_write_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 209 extern void bta_pan_free_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); 210 211 212 #endif /* BTA_PAN_INT_H */ 213