blob: df79fcb473a59fd5cf5ba9af3f22144f0243043d [file] [log] [blame]
The Android Open Source Project5738f832012-12-12 16:00:35 -08001/******************************************************************************
2 *
Jakub Pawlowski5b790fe2017-09-18 09:00:20 -07003 * Copyright 2004-2012 Broadcom Corporation
The Android Open Source Project5738f832012-12-12 16:00:35 -08004 *
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
The Android Open Source Project5738f832012-12-12 16:00:35 -080027#include "bta_pan_api.h"
Myles Watsoncd1fd072016-11-09 13:17:43 -080028#include "bta_sys.h"
29#include "osi/include/fixed_queue.h"
The Android Open Source Project5738f832012-12-12 16:00:35 -080030
31/*****************************************************************************
Myles Watson8af480e2016-11-09 10:40:23 -080032 * Constants
33 ****************************************************************************/
The Android Open Source Project5738f832012-12-12 16:00:35 -080034
The Android Open Source Project5738f832012-12-12 16:00:35 -080035/* PAN events */
Myles Watsoncd1fd072016-11-09 13:17:43 -080036enum {
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,
The Android Open Source Project5738f832012-12-12 16:00:35 -080048
Myles Watsoncd1fd072016-11-09 13:17:43 -080049 /* 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
The Android Open Source Project5738f832012-12-12 16:00:35 -080054};
55
Nitin Shivpure36f43cc2013-08-29 21:28:59 +053056/* state machine states */
Myles Watsoncd1fd072016-11-09 13:17:43 -080057enum { BTA_PAN_IDLE_ST, BTA_PAN_OPEN_ST, BTA_PAN_CLOSING_ST };
The Android Open Source Project5738f832012-12-12 16:00:35 -080058
59/*****************************************************************************
Myles Watson8af480e2016-11-09 10:40:23 -080060 * Data types
61 ****************************************************************************/
The Android Open Source Project5738f832012-12-12 16:00:35 -080062
63/* data type for BTA_PAN_API_ENABLE_EVT */
Myles Watsoncd1fd072016-11-09 13:17:43 -080064typedef struct {
65 BT_HDR hdr; /* Event header */
66 tBTA_PAN_CBACK* p_cback; /* PAN callback function */
The Android Open Source Project5738f832012-12-12 16:00:35 -080067} tBTA_PAN_API_ENABLE;
68
69/* data type for BTA_PAN_API_REG_ROLE_EVT */
Myles Watsoncd1fd072016-11-09 13:17:43 -080070typedef 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 */
The Android Open Source Project5738f832012-12-12 16:00:35 -080082
83} tBTA_PAN_API_SET_ROLE;
84
85/* data type for BTA_PAN_API_OPEN_EVT */
Myles Watsoncd1fd072016-11-09 13:17:43 -080086typedef struct {
87 BT_HDR hdr; /* Event header */
88 tBTA_PAN_ROLE local_role; /* local role */
89 tBTA_PAN_ROLE peer_role; /* peer role */
Jakub Pawlowskia484a882017-06-24 17:30:18 -070090 RawAddress bd_addr; /* peer bdaddr */
The Android Open Source Project5738f832012-12-12 16:00:35 -080091} tBTA_PAN_API_OPEN;
92
93/* data type for BTA_PAN_CI_TX_FLOW_EVT */
Myles Watsoncd1fd072016-11-09 13:17:43 -080094typedef struct {
95 BT_HDR hdr; /* Event header */
96 bool enable; /* Flow control setting */
The Android Open Source Project5738f832012-12-12 16:00:35 -080097} tBTA_PAN_CI_TX_FLOW;
98
99/* data type for BTA_PAN_CONN_OPEN_EVT */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800100typedef struct {
101 BT_HDR hdr; /* Event header */
102 tPAN_RESULT result;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800103
104} tBTA_PAN_CONN;
105
The Android Open Source Project5738f832012-12-12 16:00:35 -0800106/* union of all data types */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800107typedef 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;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800114} tBTA_PAN_DATA;
115
116/* state machine control block */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800117typedef struct {
Jakub Pawlowskia484a882017-06-24 17:30:18 -0700118 RawAddress bd_addr; /* peer bdaddr */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800119 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 */
The Android Open Source Project5738f832012-12-12 16:00:35 -0800130
131} tBTA_PAN_SCB;
132
The Android Open Source Project5738f832012-12-12 16:00:35 -0800133/* main control block */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800134typedef 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 */
The Android Open Source Project5738f832012-12-12 16:00:35 -0800140
141} tBTA_PAN_CB;
142
The Android Open Source Project5738f832012-12-12 16:00:35 -0800143/* pan data param */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800144typedef struct {
145 BT_HDR hdr;
Jakub Pawlowskia484a882017-06-24 17:30:18 -0700146 RawAddress src;
147 RawAddress dst;
Myles Watsoncd1fd072016-11-09 13:17:43 -0800148 uint16_t protocol;
149 bool ext;
150 bool forward;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800151
152} tBTA_PAN_DATA_PARAMS;
153
The Android Open Source Project5738f832012-12-12 16:00:35 -0800154/*****************************************************************************
Myles Watson8af480e2016-11-09 10:40:23 -0800155 * Global data
156 ****************************************************************************/
The Android Open Source Project5738f832012-12-12 16:00:35 -0800157
158/* PAN control block */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800159extern tBTA_PAN_CB bta_pan_cb;
The Android Open Source Project5738f832012-12-12 16:00:35 -0800160
161/*****************************************************************************
Myles Watson8af480e2016-11-09 10:40:23 -0800162 * Function prototypes
163 ****************************************************************************/
Myles Watsoncd1fd072016-11-09 13:17:43 -0800164extern tBTA_PAN_SCB* bta_pan_scb_alloc(void);
165extern void bta_pan_scb_dealloc(tBTA_PAN_SCB* p_scb);
166extern uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB* p_scb);
167extern tBTA_PAN_SCB* bta_pan_scb_by_handle(uint16_t handle);
168extern bool bta_pan_hdl_event(BT_HDR* p_msg);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800169
170/* action functions */
Myles Watsoncd1fd072016-11-09 13:17:43 -0800171extern void bta_pan_enable(tBTA_PAN_DATA* p_data);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800172extern void bta_pan_disable(void);
Myles Watsoncd1fd072016-11-09 13:17:43 -0800173extern void bta_pan_set_role(tBTA_PAN_DATA* p_data);
174extern void bta_pan_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
175extern void bta_pan_api_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
176extern void bta_pan_set_shutdown(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
177extern void bta_pan_rx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
178extern void bta_pan_tx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
179extern void bta_pan_tx_flow(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
180extern void bta_pan_conn_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
181extern void bta_pan_conn_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
182extern void bta_pan_writebuf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
183extern void bta_pan_write_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
184extern void bta_pan_free_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800185
186#endif /* BTA_PAN_INT_H */