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} tBTA_JV_RFC_CB; 200 201/* data type for BTA_JV_API_L2CAP_CONNECT_EVT */ 202typedef struct 203{ 204 BT_HDR hdr; 205 tBTA_SEC sec_mask; 206 tBTA_JV_ROLE role; 207 UINT16 remote_psm; 208 UINT16 rx_mtu; 209 BD_ADDR peer_bd_addr; 210 tBTA_JV_L2CAP_CBACK *p_cback; 211} tBTA_JV_API_L2CAP_CONNECT; 212 213/* data type for BTA_JV_API_L2CAP_SERVER_EVT */ 214typedef struct 215{ 216 BT_HDR hdr; 217 tBTA_SEC sec_mask; 218 tBTA_JV_ROLE role; 219 UINT16 local_psm; 220 UINT16 rx_mtu; 221 tBTA_JV_L2CAP_CBACK *p_cback; 222} tBTA_JV_API_L2CAP_SERVER; 223 224/* data type for BTA_JV_API_L2CAP_CLOSE_EVT */ 225typedef struct 226{ 227 BT_HDR hdr; 228 UINT16 handle; 229 tBTA_JV_L2C_CB *p_cb; 230} tBTA_JV_API_L2CAP_CLOSE; 231 232/* data type for BTA_JV_API_L2CAP_READ_EVT */ 233typedef struct 234{ 235 BT_HDR hdr; 236 UINT16 handle; 237 UINT32 req_id; 238 tBTA_JV_L2CAP_CBACK *p_cback; 239 UINT8* p_data; 240 UINT16 len; 241} tBTA_JV_API_L2CAP_READ; 242 243/* data type for BTA_JV_API_L2CAP_WRITE_EVT */ 244typedef struct 245{ 246 BT_HDR hdr; 247 UINT16 handle; 248 UINT32 req_id; 249 tBTA_JV_L2C_CB *p_cb; 250 UINT8 *p_data; 251 UINT16 len; 252} tBTA_JV_API_L2CAP_WRITE; 253 254/* data type for BTA_JV_API_RFCOMM_CONNECT_EVT */ 255typedef struct 256{ 257 BT_HDR hdr; 258 tBTA_SEC sec_mask; 259 tBTA_JV_ROLE role; 260 UINT8 remote_scn; 261 BD_ADDR peer_bd_addr; 262 tBTA_JV_RFCOMM_CBACK *p_cback; 263 void *user_data; 264} tBTA_JV_API_RFCOMM_CONNECT; 265 266/* data type for BTA_JV_API_RFCOMM_SERVER_EVT */ 267typedef struct 268{ 269 BT_HDR hdr; 270 tBTA_SEC sec_mask; 271 tBTA_JV_ROLE role; 272 UINT8 local_scn; 273 UINT8 max_session; 274 int rfc_handle; 275 tBTA_JV_RFCOMM_CBACK *p_cback; 276 void *user_data; 277} tBTA_JV_API_RFCOMM_SERVER; 278 279/* data type for BTA_JV_API_RFCOMM_READ_EVT */ 280typedef struct 281{ 282 BT_HDR hdr; 283 UINT16 handle; 284 UINT32 req_id; 285 UINT8 *p_data; 286 UINT16 len; 287 tBTA_JV_RFC_CB *p_cb; 288 tBTA_JV_PCB *p_pcb; 289} tBTA_JV_API_RFCOMM_READ; 290 291/* data type for BTA_JV_API_RFCOMM_WRITE_EVT */ 292typedef struct 293{ 294 BT_HDR hdr; 295 UINT16 handle; 296 UINT32 req_id; 297 UINT8 *p_data; 298 int len; 299 tBTA_JV_RFC_CB *p_cb; 300 tBTA_JV_PCB *p_pcb; 301} tBTA_JV_API_RFCOMM_WRITE; 302 303/* data type for BTA_JV_API_RFCOMM_CLOSE_EVT */ 304typedef struct 305{ 306 BT_HDR hdr; 307 UINT16 handle; 308 tBTA_JV_RFC_CB *p_cb; 309 tBTA_JV_PCB *p_pcb; 310} tBTA_JV_API_RFCOMM_CLOSE; 311 312/* data type for BTA_JV_API_CREATE_RECORD_EVT */ 313typedef struct 314{ 315 BT_HDR hdr; 316 void *user_data; 317} tBTA_JV_API_CREATE_RECORD; 318 319/* data type for BTA_JV_API_UPDATE_RECORD_EVT */ 320typedef struct 321{ 322 BT_HDR hdr; 323 UINT32 handle; 324 UINT16 *p_ids; 325 UINT8 **p_values; 326 INT32 *p_value_sizes; 327 INT32 array_len; 328} tBTA_JV_API_UPDATE_RECORD; 329 330/* data type for BTA_JV_API_ADD_ATTRIBUTE_EVT */ 331typedef struct 332{ 333 BT_HDR hdr; 334 UINT32 handle; 335 UINT16 attr_id; 336 UINT8 *p_value; 337 INT32 value_size; 338} tBTA_JV_API_ADD_ATTRIBUTE; 339 340/* data type for BTA_JV_API_FREE_SCN_EVT */ 341typedef struct 342{ 343 BT_HDR hdr; 344 UINT8 scn; 345} tBTA_JV_API_FREE_SCN; 346/* union of all data types */ 347typedef union 348{ 349 /* GKI event buffer header */ 350 BT_HDR hdr; 351 tBTA_JV_API_ENABLE enable; 352 tBTA_JV_API_SET_DISCOVERABILITY set_discoverability; 353 tBTA_JV_API_GET_REMOTE_NAME get_rmt_name; 354 tBTA_JV_API_SET_SERVICE_CLASS set_service; 355 tBTA_JV_API_SET_ENCRYPTION set_encrypt; 356 tBTA_JV_API_START_DISCOVERY start_discovery; 357 tBTA_JV_API_CANCEL_DISCOVERY cancel_discovery; 358 tBTA_JV_API_GET_SERVICES_LENGTH get_services_length; 359 tBTA_JV_API_GET_SERVICE_RESULT get_service_result; 360 tBTA_JV_API_SERVICE_SELECT service_select; 361 tBTA_JV_API_FREE_SCN free_scn; 362 tBTA_JV_API_CREATE_RECORD create_record; 363 tBTA_JV_API_UPDATE_RECORD update_record; 364 tBTA_JV_API_ADD_ATTRIBUTE add_attr; 365 tBTA_JV_API_L2CAP_CONNECT l2cap_connect; 366 tBTA_JV_API_L2CAP_READ l2cap_read; 367 tBTA_JV_API_L2CAP_WRITE l2cap_write; 368 tBTA_JV_API_L2CAP_CLOSE l2cap_close; 369 tBTA_JV_API_L2CAP_SERVER l2cap_server; 370 tBTA_JV_API_RFCOMM_CONNECT rfcomm_connect; 371 tBTA_JV_API_RFCOMM_READ rfcomm_read; 372 tBTA_JV_API_RFCOMM_WRITE rfcomm_write; 373 tBTA_JV_API_RFCOMM_CLOSE rfcomm_close; 374 tBTA_JV_API_RFCOMM_SERVER rfcomm_server; 375} tBTA_JV_MSG; 376 377#if SDP_FOR_JV_INCLUDED == TRUE 378#define BTA_JV_L2C_FOR_SDP_HDL GAP_MAX_CONNECTIONS 379#endif 380 381/* JV control block */ 382typedef struct 383{ 384#if SDP_FOR_JV_INCLUDED == TRUE 385 UINT32 sdp_for_jv; /* The SDP client connection handle */ 386 UINT32 sdp_data_size; /* the data len */ 387#endif 388 /* the SDP handle reported to JV user is the (index + 1) to sdp_handle[]. 389 * if sdp_handle[i]==0, it's not used. 390 * otherwise sdp_handle[i] is the stack SDP handle. */ 391 UINT32 sdp_handle[BTA_JV_MAX_SDP_REC]; /* SDP records created */ 392 UINT8 *p_sel_raw_data;/* the raw data of last service select */ 393 INT32 sel_len; /* the SDP record size of last service select */ 394 tBTA_JV_DM_CBACK *p_dm_cback; 395 tBTA_JV_L2C_CB l2c_cb[BTA_JV_MAX_L2C_CONN]; /* index is GAP handle (index) */ 396 tBTA_JV_RFC_CB rfc_cb[BTA_JV_MAX_RFC_CONN]; 397 tBTA_JV_PCB port_cb[MAX_RFC_PORTS]; /* index of this array is the port_handle, */ 398 UINT8 sec_id[BTA_JV_NUM_SERVICE_ID]; /* service ID */ 399 BOOLEAN scn[BTA_JV_MAX_SCN]; /* SCN allocated by java */ 400 UINT8 sdp_active; /* see BTA_JV_SDP_ACT_* */ 401 tSDP_UUID uuid; /* current uuid of sdp discovery*/ 402 void *user_data; /* piggyback user data*/ 403} tBTA_JV_CB; 404 405enum 406{ 407 BTA_JV_SDP_ACT_NONE = 0, 408 BTA_JV_SDP_ACT_YES, /* waiting for SDP result */ 409 BTA_JV_SDP_ACT_CANCEL /* waiting for cancel complete */ 410}; 411 412/* JV control block */ 413#if BTA_DYNAMIC_MEMORY == FALSE 414extern tBTA_JV_CB bta_jv_cb; 415#else 416extern tBTA_JV_CB *bta_jv_cb_ptr; 417#define bta_jv_cb (*bta_jv_cb_ptr) 418#endif 419 420/* config struct */ 421extern tBTA_JV_CFG *p_bta_jv_cfg; 422 423/* this is defined in stack/sdp. used by bta jv */ 424extern UINT8 *sdpu_get_len_from_type (UINT8 *p, UINT8 type, UINT32 *p_len); 425 426extern BOOLEAN bta_jv_sm_execute(BT_HDR *p_msg); 427 428extern UINT32 bta_jv_get_sdp_handle(UINT32 sdp_id); 429extern void bta_jv_enable (tBTA_JV_MSG *p_data); 430extern void bta_jv_disable (tBTA_JV_MSG *p_data); 431extern void bta_jv_set_discoverability (tBTA_JV_MSG *p_data); 432extern void bta_jv_get_local_device_addr (tBTA_JV_MSG *p_data); 433extern void bta_jv_get_local_device_name (tBTA_JV_MSG *p_data); 434extern void bta_jv_get_remote_device_name (tBTA_JV_MSG *p_data); 435extern void bta_jv_set_service_class (tBTA_JV_MSG *p_data); 436extern void bta_jv_set_encryption (tBTA_JV_MSG *p_data); 437extern void bta_jv_get_scn (tBTA_JV_MSG *p_data); 438extern void bta_jv_free_scn (tBTA_JV_MSG *p_data); 439extern void bta_jv_start_discovery (tBTA_JV_MSG *p_data); 440extern void bta_jv_cancel_discovery (tBTA_JV_MSG *p_data); 441extern void bta_jv_get_services_length (tBTA_JV_MSG *p_data); 442extern void bta_jv_service_select (tBTA_JV_MSG *p_data); 443extern void bta_jv_create_record (tBTA_JV_MSG *p_data); 444extern void bta_jv_update_record (tBTA_JV_MSG *p_data); 445extern void bta_jv_add_attribute (tBTA_JV_MSG *p_data); 446extern void bta_jv_delete_attribute (tBTA_JV_MSG *p_data); 447extern void bta_jv_delete_record (tBTA_JV_MSG *p_data); 448extern void bta_jv_l2cap_connect (tBTA_JV_MSG *p_data); 449extern void bta_jv_l2cap_close (tBTA_JV_MSG *p_data); 450extern void bta_jv_l2cap_start_server (tBTA_JV_MSG *p_data); 451extern void bta_jv_l2cap_stop_server (tBTA_JV_MSG *p_data); 452extern void bta_jv_l2cap_read (tBTA_JV_MSG *p_data); 453extern void bta_jv_l2cap_write (tBTA_JV_MSG *p_data); 454extern void bta_jv_rfcomm_connect (tBTA_JV_MSG *p_data); 455extern void bta_jv_rfcomm_close (tBTA_JV_MSG *p_data); 456extern void bta_jv_rfcomm_start_server (tBTA_JV_MSG *p_data); 457extern void bta_jv_rfcomm_stop_server (tBTA_JV_MSG *p_data); 458extern void bta_jv_rfcomm_read (tBTA_JV_MSG *p_data); 459extern void bta_jv_rfcomm_write (tBTA_JV_MSG *p_data); 460 461#endif /* BTA_JV_INT_H */ 462