1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
24
25
26
27
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
58
59
60
68
69
70
71
72
77
78
79
80
81
82
83
84
85
86
90
91
92
96
97
98
99
100
101
102
103
104
105
106
107
108
113
114
115
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
207
208
209
210
211
212
213
214
215
216
217
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
309
310
311
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
336
337
338
345
346
347
348
355
356
357
364
365
366
373
374
375
381
382
383
384
385
386
387
388
389
390
391
392
393
399
400
401
408
409
410
411
412
413
414
415
418
419
420
421
422
423
424
425
426
427
429
430
431
433
434
435
436
437
438
443
444
445
446
447
448
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
490
491
492
493
/* ... */
/* ... */
#ifndef BTA_JV_INT_H
#define BTA_JV_INT_H
#include "bta/bta_sys.h"
#include "bta/bta_api.h"
#include "bta/bta_jv_api.h"
#include "stack/rfcdefs.h"
#include "stack/port_api.h"
#include "stack/sdp_api.h"
#include "common/bt_target.h"7 includes
#if (defined BTA_JV_INCLUDED && BTA_JV_INCLUDED == TRUE)
/* ... */
#define SPP_VERSION 0x0102
enum {
BTA_JV_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_JV),
BTA_JV_API_DISABLE_EVT,
BTA_JV_API_GET_CHANNEL_EVT,
BTA_JV_API_FREE_SCN_EVT,
BTA_JV_API_START_DISCOVERY_EVT,
BTA_JV_API_CREATE_RECORD_EVT,
BTA_JV_API_DELETE_RECORD_EVT,
#if BTA_JV_L2CAP_INCLUDED
BTA_JV_API_L2CAP_CONNECT_EVT,
BTA_JV_API_L2CAP_CLOSE_EVT,
BTA_JV_API_L2CAP_START_SERVER_EVT,
BTA_JV_API_L2CAP_STOP_SERVER_EVT,
BTA_JV_API_L2CAP_READ_EVT,
BTA_JV_API_L2CAP_WRITE_EVT,/* ... */
#endif
#if BTA_JV_RFCOMM_INCLUDED
BTA_JV_API_RFCOMM_CONFIG_EVT,
BTA_JV_API_RFCOMM_CONNECT_EVT,
BTA_JV_API_RFCOMM_CLOSE_EVT,
BTA_JV_API_RFCOMM_START_SERVER_EVT,
BTA_JV_API_RFCOMM_STOP_SERVER_EVT,
BTA_JV_API_RFCOMM_READ_EVT,
BTA_JV_API_RFCOMM_WRITE_EVT,
BTA_JV_API_RFCOMM_FLOW_CONTROL_EVT,/* ... */
#endif
BTA_JV_API_SET_PM_PROFILE_EVT,
BTA_JV_API_PM_STATE_CHANGE_EVT,
#if BTA_JV_L2CAP_INCLUDED
BTA_JV_API_L2CAP_CONNECT_LE_EVT,
BTA_JV_API_L2CAP_START_SERVER_LE_EVT,
BTA_JV_API_L2CAP_STOP_SERVER_LE_EVT,
BTA_JV_API_L2CAP_WRITE_FIXED_EVT,
BTA_JV_API_L2CAP_CLOSE_FIXED_EVT,/* ... */
#endif
BTA_JV_MAX_INT_EVT
}{...};
#ifndef BTA_JV_RFC_EV_MASK
#define BTA_JV_RFC_EV_MASK (PORT_EV_RXCHAR | PORT_EV_TXEMPTY | PORT_EV_FC | PORT_EV_FCS)
#endif
typedef struct {
BT_HDR hdr;
tBTA_JV_DM_CBACK *p_cback;
}{...} tBTA_JV_API_ENABLE;
typedef struct {
BT_HDR hdr;
tBTA_JV_RFCOMM_CBACK *p_cback;
}{...} tBTA_JV_API_DISABLE;
typedef struct {
BT_HDR hdr;
BD_ADDR bd_addr;
UINT16 num_uuid;
tSDP_UUID uuid_list[BTA_JV_MAX_UUIDS];
UINT16 num_attr;
UINT16 attr_list[BTA_JV_MAX_ATTRS];
void *user_data;
}{...} tBTA_JV_API_START_DISCOVERY;
enum {
BTA_JV_PM_FREE_ST = 0,
BTA_JV_PM_IDLE_ST,
BTA_JV_PM_BUSY_ST
}{...};
typedef struct {
UINT32 handle;
UINT8 state;
tBTA_JV_PM_ID app_id;
BD_ADDR peer_bd_addr;
}{...} tBTA_JV_PM_CB;
enum {
BTA_JV_ST_NONE = 0,
BTA_JV_ST_CL_OPENING,
BTA_JV_ST_CL_OPEN,
BTA_JV_ST_CL_CLOSING,
BTA_JV_ST_SR_LISTEN,
BTA_JV_ST_SR_OPEN,
BTA_JV_ST_SR_CLOSING
}{...} ;
typedef UINT8 tBTA_JV_STATE;
#define BTA_JV_ST_CL_MAX BTA_JV_ST_CL_CLOSING
#if BTA_JV_L2CAP_INCLUDED
typedef struct {
tBTA_JV_L2CAP_CBACK *p_cback;
UINT16 psm;
tBTA_JV_STATE state;
tBTA_SERVICE_ID sec_id;
UINT32 handle;
BOOLEAN cong;
tBTA_JV_PM_CB *p_pm_cb;
void *user_data;
}{...} tBTA_JV_L2C_CB;/* ... */
#endif
#define BTA_JV_RFC_HDL_MASK 0xFF
#define BTA_JV_RFCOMM_MASK 0x80
#define BTA_JV_ALL_APP_ID 0xFF
#define BTA_JV_RFC_HDL_TO_SIDX(r) (((r)&0xFF00) >> 8)
#define BTA_JV_RFC_H_S_TO_HDL(h, s) ((h)|(s<<8))5 defines
typedef struct {
UINT32 handle;
UINT16 port_handle;
tBTA_JV_STATE state;
UINT8 max_sess;
void *user_data;
BOOLEAN cong;
tBTA_JV_PM_CB *p_pm_cb;
}{...} tBTA_JV_PCB;
#if BTA_JV_RFCOMM_INCLUDED
typedef struct {
tBTA_JV_RFCOMM_CBACK *p_cback;
UINT16 rfc_hdl[BTA_JV_MAX_RFC_SR_SESSION];
tBTA_SERVICE_ID sec_id;
UINT8 handle;
UINT8 scn;
UINT8 max_sess;
int curr_sess;
}{...} tBTA_JV_RFC_CB;/* ... */
#endif
#if BTA_JV_L2CAP_INCLUDED
typedef struct {
BT_HDR hdr;
tBTA_SEC sec_mask;
tBTA_JV_ROLE role;
union {
UINT16 remote_psm;
UINT16 remote_chan;
}{...};
UINT16 rx_mtu;
BD_ADDR peer_bd_addr;
INT32 has_cfg;
tL2CAP_CFG_INFO cfg;
INT32 has_ertm_info;
tL2CAP_ERTM_INFO ertm_info;
tBTA_JV_L2CAP_CBACK *p_cback;
void *user_data;
}{...} tBTA_JV_API_L2CAP_CONNECT;
typedef struct {
BT_HDR hdr;
tBTA_SEC sec_mask;
tBTA_JV_ROLE role;
union {
UINT16 local_psm;
UINT16 local_chan;
}{...};
UINT16 rx_mtu;
INT32 has_cfg;
tL2CAP_CFG_INFO cfg;
INT32 has_ertm_info;
tL2CAP_ERTM_INFO ertm_info;
tBTA_JV_L2CAP_CBACK *p_cback;
void *user_data;
}{...} tBTA_JV_API_L2CAP_SERVER;
typedef struct {
BT_HDR hdr;
UINT32 handle;
tBTA_JV_L2C_CB *p_cb;
tBTA_JV_L2CAP_CBACK *p_cback;
void *user_data;
}{...} tBTA_JV_API_L2CAP_CLOSE;
typedef struct {
BT_HDR hdr;
UINT32 handle;
UINT32 req_id;
tBTA_JV_L2CAP_CBACK *p_cback;
UINT8 *p_data;
UINT16 len;
void *user_data;
}{...} tBTA_JV_API_L2CAP_READ;
typedef struct {
BT_HDR hdr;
UINT32 handle;
UINT32 req_id;
tBTA_JV_L2C_CB *p_cb;
UINT8 *p_data;
UINT16 len;
void *user_data;
}{...} tBTA_JV_API_L2CAP_WRITE;
typedef struct {
BT_HDR hdr;
UINT16 channel;
BD_ADDR addr;
UINT32 req_id;
tBTA_JV_L2CAP_CBACK *p_cback;
UINT8 *p_data;
UINT16 len;
void *user_data;
}{...} tBTA_JV_API_L2CAP_WRITE_FIXED;/* ... */
#endif
#if BTA_JV_RFCOMM_INCLUDED
typedef struct {
BT_HDR hdr;
BOOLEAN enable_l2cap_ertm;
}{...} tBTA_JV_API_RFCOMM_CONFIG;
typedef struct {
BT_HDR hdr;
tBTA_SEC sec_mask;
tBTA_JV_ROLE role;
UINT8 remote_scn;
BD_ADDR peer_bd_addr;
tBTA_JV_RFCOMM_CBACK *p_cback;
void *user_data;
}{...} tBTA_JV_API_RFCOMM_CONNECT;
typedef struct {
BT_HDR hdr;
tBTA_SEC sec_mask;
tBTA_JV_ROLE role;
UINT8 local_scn;
UINT8 max_session;
UINT32 handle;
tBTA_JV_RFCOMM_CBACK *p_cback;
void *user_data;
}{...} tBTA_JV_API_RFCOMM_SERVER;
typedef struct {
BT_HDR hdr;
UINT32 handle;
UINT32 req_id;
UINT8 *p_data;
UINT16 len;
tBTA_JV_RFC_CB *p_cb;
tBTA_JV_PCB *p_pcb;
}{...} tBTA_JV_API_RFCOMM_READ;/* ... */
#endif
typedef struct {
BT_HDR hdr;
UINT32 handle;
tBTA_JV_PM_ID app_id;
tBTA_JV_CONN_STATE init_st;
}{...} tBTA_JV_API_SET_PM_PROFILE;
typedef struct {
BT_HDR hdr;
tBTA_JV_PM_CB *p_cb;
tBTA_JV_CONN_STATE state;
}{...} tBTA_JV_API_PM_STATE_CHANGE;
#if BTA_JV_RFCOMM_INCLUDED
typedef struct {
BT_HDR hdr;
UINT32 handle;
UINT32 req_id;
UINT8 *p_data;
int len;
tBTA_JV_RFC_CB *p_cb;
tBTA_JV_PCB *p_pcb;
}{...} tBTA_JV_API_RFCOMM_WRITE;
typedef struct {
BT_HDR hdr;
tBTA_JV_RFC_CB *p_cb;
tBTA_JV_PCB *p_pcb;
UINT16 credits_given;
}{...} tBTA_JV_API_RFCOMM_FLOW_CONTROL;
typedef struct {
BT_HDR hdr;
UINT32 handle;
tBTA_JV_RFC_CB *p_cb;
tBTA_JV_PCB *p_pcb;
void *user_data;
}{...} tBTA_JV_API_RFCOMM_CLOSE;/* ... */
#endif
typedef struct {
BT_HDR hdr;
#define ESP_SDP_SERVER_NAME_MAX (32)
char name[ESP_SDP_SERVER_NAME_MAX + 1];
INT32 channel;
void *user_data;
}{...} tBTA_JV_API_CREATE_RECORD;
typedef struct {
BT_HDR hdr;
UINT32 handle;
UINT16 attr_id;
UINT8 *p_value;
INT32 value_size;
}{...} tBTA_JV_API_ADD_ATTRIBUTE;
typedef struct {
BT_HDR hdr;
INT32 type;
UINT16 scn;
tBTA_JV_RFCOMM_CBACK *p_cback;
void *user_data;
}{...} tBTA_JV_API_FREE_CHANNEL;
typedef struct {
BT_HDR hdr;
INT32 type;
INT32 channel;
void *user_data;
}{...} tBTA_JV_API_ALLOC_CHANNEL;
typedef union {
BT_HDR hdr;
tBTA_JV_API_ENABLE enable;
tBTA_JV_API_DISABLE disable;
tBTA_JV_API_START_DISCOVERY start_discovery;
tBTA_JV_API_ALLOC_CHANNEL alloc_channel;
tBTA_JV_API_FREE_CHANNEL free_channel;
tBTA_JV_API_CREATE_RECORD create_record;
tBTA_JV_API_ADD_ATTRIBUTE add_attr;
#if BTA_JV_L2CAP_INCLUDED
tBTA_JV_API_L2CAP_CONNECT l2cap_connect;
tBTA_JV_API_L2CAP_READ l2cap_read;
tBTA_JV_API_L2CAP_WRITE l2cap_write;
tBTA_JV_API_L2CAP_CLOSE l2cap_close;
tBTA_JV_API_L2CAP_SERVER l2cap_server;
tBTA_JV_API_L2CAP_WRITE_FIXED l2cap_write_fixed;/* ... */
#endif
#if BTA_JV_RFCOMM_INCLUDED
tBTA_JV_API_RFCOMM_CONFIG rfcomm_config;
tBTA_JV_API_RFCOMM_CONNECT rfcomm_connect;
tBTA_JV_API_RFCOMM_READ rfcomm_read;
tBTA_JV_API_RFCOMM_WRITE rfcomm_write;
tBTA_JV_API_RFCOMM_FLOW_CONTROL rfcomm_fc;
tBTA_JV_API_RFCOMM_CLOSE rfcomm_close;
tBTA_JV_API_RFCOMM_SERVER rfcomm_server;/* ... */
#endif
tBTA_JV_API_SET_PM_PROFILE set_pm;
tBTA_JV_API_PM_STATE_CHANGE change_pm_state;
}{...} tBTA_JV_MSG;
typedef struct {
/* ... */
UINT32 sdp_handle[BTA_JV_MAX_SDP_REC];
UINT8 *p_sel_raw_data;
tBTA_JV_DM_CBACK *p_dm_cback;
#if BTA_JV_L2CAP_INCLUDED
tBTA_JV_L2C_CB l2c_cb[BTA_JV_MAX_L2C_CONN];
#endif
#if BTA_JV_RFCOMM_INCLUDED
tBTA_JV_RFC_CB rfc_cb[BTA_JV_MAX_RFC_CONN];
#endif
tBTA_JV_PCB port_cb[MAX_RFC_PORTS];
/* ... */
UINT8 sec_id[BTA_JV_NUM_SERVICE_ID];
BOOLEAN scn[BTA_JV_MAX_SCN];
UINT16 free_psm_list[BTA_JV_MAX_L2C_CONN];
/* ... */
UINT8 sdp_active;
tSDP_UUID uuid;
tBTA_JV_PM_CB pm_cb[BTA_JV_PM_MAX_NUM];
}{...} tBTA_JV_CB;
enum {
BTA_JV_SDP_ACT_NONE = 0,
BTA_JV_SDP_ACT_YES,
BTA_JV_SDP_ACT_CANCEL
}{...};
#if BTA_DYNAMIC_MEMORY == FALSE
extern tBTA_JV_CB bta_jv_cb;
#else
extern tBTA_JV_CB *bta_jv_cb_ptr;
#define bta_jv_cb (*bta_jv_cb_ptr)/* ... */
#endif
extern tBTA_JV_CFG *p_bta_jv_cfg;
extern BOOLEAN bta_jv_sm_execute(BT_HDR *p_msg);
extern void bta_jv_enable (tBTA_JV_MSG *p_data);
extern void bta_jv_disable (tBTA_JV_MSG *p_data);
extern void bta_jv_get_channel_id (tBTA_JV_MSG *p_data);
extern void bta_jv_free_scn (tBTA_JV_MSG *p_data);
extern void bta_jv_start_discovery (tBTA_JV_MSG *p_data);
extern void bta_jv_create_record (tBTA_JV_MSG *p_data);
extern void bta_jv_delete_record (tBTA_JV_MSG *p_data);
#if BTA_JV_L2CAP_INCLUDED
extern void bta_jv_l2cap_connect (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_close (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_start_server (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_stop_server (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_read (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_write (tBTA_JV_MSG *p_data);/* ... */
#endif
#if BTA_JV_RFCOMM_INCLUDED
extern void bta_jv_rfcomm_config (tBTA_JV_MSG *p_data);
extern void bta_jv_rfcomm_connect (tBTA_JV_MSG *p_data);
extern void bta_jv_rfcomm_close (tBTA_JV_MSG *p_data);
extern void bta_jv_rfcomm_start_server (tBTA_JV_MSG *p_data);
extern void bta_jv_rfcomm_stop_server (tBTA_JV_MSG *p_data);
extern void bta_jv_rfcomm_read (tBTA_JV_MSG *p_data);
extern void bta_jv_rfcomm_write (tBTA_JV_MSG *p_data);
extern void bta_jv_rfcomm_flow_control(tBTA_JV_MSG *p_data);/* ... */
#endif
extern void bta_jv_set_pm_profile (tBTA_JV_MSG *p_data);
extern void bta_jv_change_pm_state(tBTA_JV_MSG *p_data);
#if BTA_JV_L2CAP_INCLUDED
extern void bta_jv_l2cap_connect_le (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_start_server_le (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_stop_server_le (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_write_fixed (tBTA_JV_MSG *p_data);
extern void bta_jv_l2cap_close_fixed (tBTA_JV_MSG *p_data);/* ... */
#endif
/* ... */
#endif /* ... */
#endif