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 36 enum 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 */ 74 typedef 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 */ 81 typedef 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 */ 89 typedef 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 */ 96 typedef 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 */ 103 typedef 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 */ 110 typedef 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 */ 122 typedef 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 */ 130 typedef 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 */ 138 typedef 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 */ 145 typedef struct 146 { 147 BT_HDR hdr; 148 UINT16 uuid; 149 } tBTA_JV_API_SERVICE_SELECT; 150 151 enum 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 } ; 161 typedef UINT8 tBTA_JV_STATE; 162 #define BTA_JV_ST_CL_MAX BTA_JV_ST_CL_CLOSING 163 164 /* JV L2CAP control block */ 165 typedef 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 */ 180 typedef 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 */ 191 typedef 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 */ 202 typedef 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 */ 214 typedef 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 */ 225 typedef 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 */ 233 typedef 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 */ 244 typedef 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 */ 255 typedef 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 */ 267 typedef 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 */ 280 typedef 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 */ 292 typedef 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 */ 304 typedef 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 */ 313 typedef 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 */ 320 typedef 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 */ 331 typedef 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 */ 341 typedef struct 342 { 343 BT_HDR hdr; 344 UINT8 scn; 345 } tBTA_JV_API_FREE_SCN; 346 /* union of all data types */ 347 typedef 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 */ 382 typedef 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 405 enum 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 414 extern tBTA_JV_CB bta_jv_cb; 415 #else 416 extern tBTA_JV_CB *bta_jv_cb_ptr; 417 #define bta_jv_cb (*bta_jv_cb_ptr) 418 #endif 419 420 /* config struct */ 421 extern tBTA_JV_CFG *p_bta_jv_cfg; 422 423 /* this is defined in stack/sdp. used by bta jv */ 424 extern UINT8 *sdpu_get_len_from_type (UINT8 *p, UINT8 type, UINT32 *p_len); 425 426 extern BOOLEAN bta_jv_sm_execute(BT_HDR *p_msg); 427 428 extern UINT32 bta_jv_get_sdp_handle(UINT32 sdp_id); 429 extern void bta_jv_enable (tBTA_JV_MSG *p_data); 430 extern void bta_jv_disable (tBTA_JV_MSG *p_data); 431 extern void bta_jv_set_discoverability (tBTA_JV_MSG *p_data); 432 extern void bta_jv_get_local_device_addr (tBTA_JV_MSG *p_data); 433 extern void bta_jv_get_local_device_name (tBTA_JV_MSG *p_data); 434 extern void bta_jv_get_remote_device_name (tBTA_JV_MSG *p_data); 435 extern void bta_jv_set_service_class (tBTA_JV_MSG *p_data); 436 extern void bta_jv_set_encryption (tBTA_JV_MSG *p_data); 437 extern void bta_jv_get_scn (tBTA_JV_MSG *p_data); 438 extern void bta_jv_free_scn (tBTA_JV_MSG *p_data); 439 extern void bta_jv_start_discovery (tBTA_JV_MSG *p_data); 440 extern void bta_jv_cancel_discovery (tBTA_JV_MSG *p_data); 441 extern void bta_jv_get_services_length (tBTA_JV_MSG *p_data); 442 extern void bta_jv_service_select (tBTA_JV_MSG *p_data); 443 extern void bta_jv_create_record (tBTA_JV_MSG *p_data); 444 extern void bta_jv_update_record (tBTA_JV_MSG *p_data); 445 extern void bta_jv_add_attribute (tBTA_JV_MSG *p_data); 446 extern void bta_jv_delete_attribute (tBTA_JV_MSG *p_data); 447 extern void bta_jv_delete_record (tBTA_JV_MSG *p_data); 448 extern void bta_jv_l2cap_connect (tBTA_JV_MSG *p_data); 449 extern void bta_jv_l2cap_close (tBTA_JV_MSG *p_data); 450 extern void bta_jv_l2cap_start_server (tBTA_JV_MSG *p_data); 451 extern void bta_jv_l2cap_stop_server (tBTA_JV_MSG *p_data); 452 extern void bta_jv_l2cap_read (tBTA_JV_MSG *p_data); 453 extern void bta_jv_l2cap_write (tBTA_JV_MSG *p_data); 454 extern void bta_jv_rfcomm_connect (tBTA_JV_MSG *p_data); 455 extern void bta_jv_rfcomm_close (tBTA_JV_MSG *p_data); 456 extern void bta_jv_rfcomm_start_server (tBTA_JV_MSG *p_data); 457 extern void bta_jv_rfcomm_stop_server (tBTA_JV_MSG *p_data); 458 extern void bta_jv_rfcomm_read (tBTA_JV_MSG *p_data); 459 extern void bta_jv_rfcomm_write (tBTA_JV_MSG *p_data); 460 461 #endif /* BTA_JV_INT_H */ 462