bta_jv_int.h revision 9ac641d0a674333af57b85b367e64cf94dfae291
1/****************************************************************************** 2 * 3 * Copyright (C) 2006-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 Java I/F 22 * 23 ******************************************************************************/ 24#ifndef BTA_JV_INT_H 25#define BTA_JV_INT_H 26 27#include "bta_sys.h" 28#include "bta_api.h" 29#include "bta_jv_api.h" 30#include "rfcdefs.h" 31 32/***************************************************************************** 33** Constants 34*****************************************************************************/ 35 36enum 37{ 38 /* these events are handled by the state machine */ 39 BTA_JV_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_JV), 40 BTA_JV_API_DISABLE_EVT, 41 BTA_JV_API_SET_DISCOVERABILITY_EVT, 42 BTA_JV_API_GET_LOCAL_DEVICE_ADDR_EVT, 43 BTA_JV_API_GET_LOCAL_DEVICE_NAME_EVT, 44 BTA_JV_API_GET_REMOTE_DEVICE_NAME_EVT, 45 BTA_JV_API_SET_SERVICE_CLASS_EVT, 46 BTA_JV_API_SET_ENCRYPTION_EVT, 47 BTA_JV_API_GET_SCN_EVT, 48 BTA_JV_API_FREE_SCN_EVT, 49 BTA_JV_API_START_DISCOVERY_EVT, 50 BTA_JV_API_CANCEL_DISCOVERY_EVT, 51 BTA_JV_API_GET_SERVICES_LENGTH_EVT, 52 BTA_JV_API_SERVICE_SELECT_EVT, 53 BTA_JV_API_CREATE_RECORD_EVT, 54 BTA_JV_API_UPDATE_RECORD_EVT, 55 BTA_JV_API_ADD_ATTRIBUTE_EVT, 56 BTA_JV_API_DELETE_ATTRIBUTE_EVT, 57 BTA_JV_API_DELETE_RECORD_EVT, 58 BTA_JV_API_L2CAP_CONNECT_EVT, 59 BTA_JV_API_L2CAP_CLOSE_EVT, 60 BTA_JV_API_L2CAP_START_SERVER_EVT, 61 BTA_JV_API_L2CAP_STOP_SERVER_EVT, 62 BTA_JV_API_L2CAP_READ_EVT, 63 BTA_JV_API_L2CAP_WRITE_EVT, 64 BTA_JV_API_RFCOMM_CONNECT_EVT, 65 BTA_JV_API_RFCOMM_CLOSE_EVT, 66 BTA_JV_API_RFCOMM_START_SERVER_EVT, 67 BTA_JV_API_RFCOMM_STOP_SERVER_EVT, 68 BTA_JV_API_RFCOMM_READ_EVT, 69 BTA_JV_API_RFCOMM_WRITE_EVT, 70 BTA_JV_MAX_INT_EVT 71}; 72 73/* data type for BTA_JV_API_ENABLE_EVT */ 74typedef struct 75{ 76 BT_HDR hdr; 77 tBTA_JV_DM_CBACK *p_cback; 78} tBTA_JV_API_ENABLE; 79 80/* data type for BTA_JV_API_SET_DISCOVERABILITY_EVT */ 81typedef struct 82{ 83 BT_HDR hdr; 84 tBTA_JV_DISC disc_mode; 85} tBTA_JV_API_SET_DISCOVERABILITY; 86 87 88/* data type for BTA_JV_API_SET_SERVICE_CLASS_EVT */ 89typedef struct 90{ 91 BT_HDR hdr; 92 UINT32 service; 93} tBTA_JV_API_SET_SERVICE_CLASS; 94 95/* data type for BTA_JV_API_SET_ENCRYPTION_EVT */ 96typedef struct 97{ 98 BT_HDR hdr; 99 BD_ADDR bd_addr; 100} tBTA_JV_API_SET_ENCRYPTION; 101 102/* data type for BTA_JV_API_GET_REMOTE_DEVICE_NAME_EVT */ 103typedef struct 104{ 105 BT_HDR hdr; 106 BD_ADDR bd_addr; 107} tBTA_JV_API_GET_REMOTE_NAME; 108 109/* data type for BTA_JV_API_START_DISCOVERY_EVT */ 110typedef struct 111{ 112 BT_HDR hdr; 113 BD_ADDR bd_addr; 114 UINT16 num_uuid; 115 tSDP_UUID uuid_list[BTA_JV_MAX_UUIDS]; 116 UINT16 num_attr; 117 UINT16 attr_list[BTA_JV_MAX_ATTRS]; 118 void *user_data; /* piggyback caller's private data*/ 119} tBTA_JV_API_START_DISCOVERY; 120 121/* data type for BTA_JV_API_CANCEL_DISCOVERY_EVT */ 122typedef struct 123{ 124 BT_HDR hdr; 125 void *user_data; /* piggyback caller's private data*/ 126} tBTA_JV_API_CANCEL_DISCOVERY; 127 128 129/* data type for BTA_JV_API_GET_SERVICES_LENGTH_EVT */ 130typedef struct 131{ 132 BT_HDR hdr; 133 UINT16 *p_services_len; 134 BOOLEAN inc_hdr; 135} tBTA_JV_API_GET_SERVICES_LENGTH; 136 137/* data type for BTA_JV_API_GET_SERVICE_RESULT_EVT */ 138typedef struct 139{ 140 BT_HDR hdr; 141 UINT8 **TLVs; 142} tBTA_JV_API_GET_SERVICE_RESULT; 143 144/* data type for BTA_JV_API_SERVICE_SELECT_EVT */ 145typedef struct 146{ 147 BT_HDR hdr; 148 UINT16 uuid; 149} tBTA_JV_API_SERVICE_SELECT; 150 151enum 152{ 153 BTA_JV_ST_NONE = 0, 154 BTA_JV_ST_CL_OPENING, 155 BTA_JV_ST_CL_OPEN, 156 BTA_JV_ST_CL_CLOSING, 157 BTA_JV_ST_SR_LISTEN, 158 BTA_JV_ST_SR_OPEN, 159 BTA_JV_ST_SR_CLOSING 160} ; 161typedef UINT8 tBTA_JV_STATE; 162#define BTA_JV_ST_CL_MAX BTA_JV_ST_CL_CLOSING 163 164/* JV L2CAP control block */ 165typedef struct 166{ 167 tBTA_JV_L2CAP_CBACK *p_cback; /* the callback function */ 168 UINT16 psm; /* the psm used for this server connection */ 169 tBTA_JV_STATE state; /* the state of this control block */ 170 tBTA_SERVICE_ID sec_id; /* service id */ 171 UINT16 handle; /* the handle reported to java app (same as gap handle) */ 172 BOOLEAN cong; /* TRUE, if congested */ 173} tBTA_JV_L2C_CB; 174 175#define BTA_JV_RFC_HDL_MASK 0xFF 176#define BTA_JV_RFC_HDL_TO_SIDX(r) (((r)&0xFF00) >> 8) 177#define BTA_JV_RFC_H_S_TO_HDL(h, s) ((h)|(s<<8)) 178 179/* port control block */ 180typedef struct 181{ 182 UINT32 handle; /* the rfcomm session handle at jv */ 183 UINT16 port_handle; /* port handle */ 184 tBTA_JV_STATE state; /* the state of this control block */ 185 UINT8 max_sess; /* max sessions */ 186 void *user_data; /* piggyback caller's private data*/ 187 BOOLEAN cong; /* TRUE, if congested */ 188} tBTA_JV_PCB; 189 190/* JV RFCOMM control block */ 191typedef struct 192{ 193 tBTA_JV_RFCOMM_CBACK *p_cback; /* the callback function */ 194 UINT16 rfc_hdl[BTA_JV_MAX_RFC_SR_SESSION]; 195 tBTA_SERVICE_ID sec_id; /* service id */ 196 UINT8 handle; /* index: the handle reported to java app */ 197 UINT8 scn; /* the scn of the server */ 198 UINT8 max_sess; /* max sessions */ 199 int curr_sess; /* current sessions count*/ 200} tBTA_JV_RFC_CB; 201 202/* data type for BTA_JV_API_L2CAP_CONNECT_EVT */ 203typedef struct 204{ 205 BT_HDR hdr; 206 tBTA_SEC sec_mask; 207 tBTA_JV_ROLE role; 208 UINT16 remote_psm; 209 UINT16 rx_mtu; 210 BD_ADDR peer_bd_addr; 211 tBTA_JV_L2CAP_CBACK *p_cback; 212} tBTA_JV_API_L2CAP_CONNECT; 213 214/* data type for BTA_JV_API_L2CAP_SERVER_EVT */ 215typedef struct 216{ 217 BT_HDR hdr; 218 tBTA_SEC sec_mask; 219 tBTA_JV_ROLE role; 220 UINT16 local_psm; 221 UINT16 rx_mtu; 222 tBTA_JV_L2CAP_CBACK *p_cback; 223} tBTA_JV_API_L2CAP_SERVER; 224 225/* data type for BTA_JV_API_L2CAP_CLOSE_EVT */ 226typedef struct 227{ 228 BT_HDR hdr; 229 UINT16 handle; 230 tBTA_JV_L2C_CB *p_cb; 231} tBTA_JV_API_L2CAP_CLOSE; 232 233/* data type for BTA_JV_API_L2CAP_READ_EVT */ 234typedef struct 235{ 236 BT_HDR hdr; 237 UINT16 handle; 238 UINT32 req_id; 239 tBTA_JV_L2CAP_CBACK *p_cback; 240 UINT8* p_data; 241 UINT16 len; 242} tBTA_JV_API_L2CAP_READ; 243 244/* data type for BTA_JV_API_L2CAP_WRITE_EVT */ 245typedef struct 246{ 247 BT_HDR hdr; 248 UINT16 handle; 249 UINT32 req_id; 250 tBTA_JV_L2C_CB *p_cb; 251 UINT8 *p_data; 252 UINT16 len; 253} tBTA_JV_API_L2CAP_WRITE; 254 255/* data type for BTA_JV_API_RFCOMM_CONNECT_EVT */ 256typedef struct 257{ 258 BT_HDR hdr; 259 tBTA_SEC sec_mask; 260 tBTA_JV_ROLE role; 261 UINT8 remote_scn; 262 BD_ADDR peer_bd_addr; 263 tBTA_JV_RFCOMM_CBACK *p_cback; 264 void *user_data; 265} tBTA_JV_API_RFCOMM_CONNECT; 266 267/* data type for BTA_JV_API_RFCOMM_SERVER_EVT */ 268typedef struct 269{ 270 BT_HDR hdr; 271 tBTA_SEC sec_mask; 272 tBTA_JV_ROLE role; 273 UINT8 local_scn; 274 UINT8 max_session; 275 int rfc_handle; 276 tBTA_JV_RFCOMM_CBACK *p_cback; 277 void *user_data; 278} tBTA_JV_API_RFCOMM_SERVER; 279 280/* data type for BTA_JV_API_RFCOMM_READ_EVT */ 281typedef struct 282{ 283 BT_HDR hdr; 284 UINT16 handle; 285 UINT32 req_id; 286 UINT8 *p_data; 287 UINT16 len; 288 tBTA_JV_RFC_CB *p_cb; 289 tBTA_JV_PCB *p_pcb; 290} tBTA_JV_API_RFCOMM_READ; 291 292/* data type for BTA_JV_API_RFCOMM_WRITE_EVT */ 293typedef struct 294{ 295 BT_HDR hdr; 296 UINT16 handle; 297 UINT32 req_id; 298 UINT8 *p_data; 299 int len; 300 tBTA_JV_RFC_CB *p_cb; 301 tBTA_JV_PCB *p_pcb; 302} tBTA_JV_API_RFCOMM_WRITE; 303 304/* data type for BTA_JV_API_RFCOMM_CLOSE_EVT */ 305typedef struct 306{ 307 BT_HDR hdr; 308 UINT16 handle; 309 tBTA_JV_RFC_CB *p_cb; 310 tBTA_JV_PCB *p_pcb; 311 void *user_data; 312} tBTA_JV_API_RFCOMM_CLOSE; 313 314/* data type for BTA_JV_API_CREATE_RECORD_EVT */ 315typedef struct 316{ 317 BT_HDR hdr; 318 void *user_data; 319} tBTA_JV_API_CREATE_RECORD; 320 321/* data type for BTA_JV_API_UPDATE_RECORD_EVT */ 322typedef struct 323{ 324 BT_HDR hdr; 325 UINT32 handle; 326 UINT16 *p_ids; 327 UINT8 **p_values; 328 INT32 *p_value_sizes; 329 INT32 array_len; 330} tBTA_JV_API_UPDATE_RECORD; 331 332/* data type for BTA_JV_API_ADD_ATTRIBUTE_EVT */ 333typedef struct 334{ 335 BT_HDR hdr; 336 UINT32 handle; 337 UINT16 attr_id; 338 UINT8 *p_value; 339 INT32 value_size; 340} tBTA_JV_API_ADD_ATTRIBUTE; 341 342/* data type for BTA_JV_API_FREE_SCN_EVT */ 343typedef struct 344{ 345 BT_HDR hdr; 346 UINT8 scn; 347} tBTA_JV_API_FREE_SCN; 348/* union of all data types */ 349typedef union 350{ 351 /* GKI event buffer header */ 352 BT_HDR hdr; 353 tBTA_JV_API_ENABLE enable; 354 tBTA_JV_API_SET_DISCOVERABILITY set_discoverability; 355 tBTA_JV_API_GET_REMOTE_NAME get_rmt_name; 356 tBTA_JV_API_SET_SERVICE_CLASS set_service; 357 tBTA_JV_API_SET_ENCRYPTION set_encrypt; 358 tBTA_JV_API_START_DISCOVERY start_discovery; 359 tBTA_JV_API_CANCEL_DISCOVERY cancel_discovery; 360 tBTA_JV_API_GET_SERVICES_LENGTH get_services_length; 361 tBTA_JV_API_GET_SERVICE_RESULT get_service_result; 362 tBTA_JV_API_SERVICE_SELECT service_select; 363 tBTA_JV_API_FREE_SCN free_scn; 364 tBTA_JV_API_CREATE_RECORD create_record; 365 tBTA_JV_API_UPDATE_RECORD update_record; 366 tBTA_JV_API_ADD_ATTRIBUTE add_attr; 367 tBTA_JV_API_L2CAP_CONNECT l2cap_connect; 368 tBTA_JV_API_L2CAP_READ l2cap_read; 369 tBTA_JV_API_L2CAP_WRITE l2cap_write; 370 tBTA_JV_API_L2CAP_CLOSE l2cap_close; 371 tBTA_JV_API_L2CAP_SERVER l2cap_server; 372 tBTA_JV_API_RFCOMM_CONNECT rfcomm_connect; 373 tBTA_JV_API_RFCOMM_READ rfcomm_read; 374 tBTA_JV_API_RFCOMM_WRITE rfcomm_write; 375 tBTA_JV_API_RFCOMM_CLOSE rfcomm_close; 376 tBTA_JV_API_RFCOMM_SERVER rfcomm_server; 377} tBTA_JV_MSG; 378 379#if SDP_FOR_JV_INCLUDED == TRUE 380#define BTA_JV_L2C_FOR_SDP_HDL GAP_MAX_CONNECTIONS 381#endif 382 383/* JV control block */ 384typedef struct 385{ 386#if SDP_FOR_JV_INCLUDED == TRUE 387 UINT32 sdp_for_jv; /* The SDP client connection handle */ 388 UINT32 sdp_data_size; /* the data len */ 389#endif 390 /* the SDP handle reported to JV user is the (index + 1) to sdp_handle[]. 391 * if sdp_handle[i]==0, it's not used. 392 * otherwise sdp_handle[i] is the stack SDP handle. */ 393 UINT32 sdp_handle[BTA_JV_MAX_SDP_REC]; /* SDP records created */ 394 UINT8 *p_sel_raw_data;/* the raw data of last service select */ 395 INT32 sel_len; /* the SDP record size of last service select */ 396 tBTA_JV_DM_CBACK *p_dm_cback; 397 tBTA_JV_L2C_CB l2c_cb[BTA_JV_MAX_L2C_CONN]; /* index is GAP handle (index) */ 398 tBTA_JV_RFC_CB rfc_cb[BTA_JV_MAX_RFC_CONN]; 399 tBTA_JV_PCB port_cb[MAX_RFC_PORTS]; /* index of this array is the port_handle, */ 400 UINT8 sec_id[BTA_JV_NUM_SERVICE_ID]; /* service ID */ 401 BOOLEAN scn[BTA_JV_MAX_SCN]; /* SCN allocated by java */ 402 UINT8 sdp_active; /* see BTA_JV_SDP_ACT_* */ 403 tSDP_UUID uuid; /* current uuid of sdp discovery*/ 404 void *user_data; /* piggyback user data*/ 405} tBTA_JV_CB; 406 407enum 408{ 409 BTA_JV_SDP_ACT_NONE = 0, 410 BTA_JV_SDP_ACT_YES, /* waiting for SDP result */ 411 BTA_JV_SDP_ACT_CANCEL /* waiting for cancel complete */ 412}; 413 414/* JV control block */ 415#if BTA_DYNAMIC_MEMORY == FALSE 416extern tBTA_JV_CB bta_jv_cb; 417#else 418extern tBTA_JV_CB *bta_jv_cb_ptr; 419#define bta_jv_cb (*bta_jv_cb_ptr) 420#endif 421 422/* config struct */ 423extern tBTA_JV_CFG *p_bta_jv_cfg; 424 425/* this is defined in stack/sdp. used by bta jv */ 426extern UINT8 *sdpu_get_len_from_type (UINT8 *p, UINT8 type, UINT32 *p_len); 427 428extern BOOLEAN bta_jv_sm_execute(BT_HDR *p_msg); 429 430extern UINT32 bta_jv_get_sdp_handle(UINT32 sdp_id); 431extern void bta_jv_enable (tBTA_JV_MSG *p_data); 432extern void bta_jv_disable (tBTA_JV_MSG *p_data); 433extern void bta_jv_set_discoverability (tBTA_JV_MSG *p_data); 434extern void bta_jv_get_local_device_addr (tBTA_JV_MSG *p_data); 435extern void bta_jv_get_local_device_name (tBTA_JV_MSG *p_data); 436extern void bta_jv_get_remote_device_name (tBTA_JV_MSG *p_data); 437extern void bta_jv_set_service_class (tBTA_JV_MSG *p_data); 438extern void bta_jv_set_encryption (tBTA_JV_MSG *p_data); 439extern void bta_jv_get_scn (tBTA_JV_MSG *p_data); 440extern void bta_jv_free_scn (tBTA_JV_MSG *p_data); 441extern void bta_jv_start_discovery (tBTA_JV_MSG *p_data); 442extern void bta_jv_cancel_discovery (tBTA_JV_MSG *p_data); 443extern void bta_jv_get_services_length (tBTA_JV_MSG *p_data); 444extern void bta_jv_service_select (tBTA_JV_MSG *p_data); 445extern void bta_jv_create_record (tBTA_JV_MSG *p_data); 446extern void bta_jv_update_record (tBTA_JV_MSG *p_data); 447extern void bta_jv_add_attribute (tBTA_JV_MSG *p_data); 448extern void bta_jv_delete_attribute (tBTA_JV_MSG *p_data); 449extern void bta_jv_delete_record (tBTA_JV_MSG *p_data); 450extern void bta_jv_l2cap_connect (tBTA_JV_MSG *p_data); 451extern void bta_jv_l2cap_close (tBTA_JV_MSG *p_data); 452extern void bta_jv_l2cap_start_server (tBTA_JV_MSG *p_data); 453extern void bta_jv_l2cap_stop_server (tBTA_JV_MSG *p_data); 454extern void bta_jv_l2cap_read (tBTA_JV_MSG *p_data); 455extern void bta_jv_l2cap_write (tBTA_JV_MSG *p_data); 456extern void bta_jv_rfcomm_connect (tBTA_JV_MSG *p_data); 457extern void bta_jv_rfcomm_close (tBTA_JV_MSG *p_data); 458extern void bta_jv_rfcomm_start_server (tBTA_JV_MSG *p_data); 459extern void bta_jv_rfcomm_stop_server (tBTA_JV_MSG *p_data); 460extern void bta_jv_rfcomm_read (tBTA_JV_MSG *p_data); 461extern void bta_jv_rfcomm_write (tBTA_JV_MSG *p_data); 462 463#endif /* BTA_JV_INT_H */ 464