Loading system/bta/jv/bta_jv_act.cc +25 −35 Original line number Diff line number Diff line Loading @@ -922,59 +922,48 @@ static void bta_jv_l2cap_client_cback(uint16_t gap_handle, uint16_t event) { } } /******************************************************************************* * * Function bta_jv_l2cap_connect * * Description makes an l2cap client connection * * Returns void * ******************************************************************************/ void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data) { tBTA_JV_L2C_CB* p_cb; tBTA_JV_L2CAP_CL_INIT evt_data; /* makes an l2cap client connection */ void bta_jv_l2cap_connect(int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t remote_psm, uint16_t rx_mtu, const RawAddress& peer_bd_addr, std::unique_ptr<tL2CAP_CFG_INFO> cfg_param, std::unique_ptr<tL2CAP_ERTM_INFO> ertm_info, tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id) { uint16_t handle = GAP_INVALID_HANDLE; uint8_t sec_id; tL2CAP_CFG_INFO cfg; tBTA_JV_API_L2CAP_CONNECT* cc = &(p_data->l2cap_connect); uint8_t chan_mode_mask = GAP_FCR_CHAN_OPT_BASIC; tL2CAP_ERTM_INFO* ertm_info = NULL; tL2CAP_CFG_INFO cfg; memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); if (cc->has_cfg) { cfg = cc->cfg; if (cfg_param) { cfg = *cfg_param; if (cfg.fcr_present && cfg.fcr.mode == L2CAP_FCR_ERTM_MODE) { chan_mode_mask = GAP_FCR_CHAN_OPT_ERTM; } } if (cc->has_ertm_info) { ertm_info = &(cc->ertm_info); } /* We need to use this value for MTU to be able to handle cases where cfg is * not set in req. */ cfg.mtu_present = true; cfg.mtu = cc->rx_mtu; cfg.mtu = rx_mtu; /* TODO: DM role manager L2CA_SetDesireRole(cc->role); L2CA_SetDesireRole(role); */ sec_id = bta_jv_alloc_sec_id(); uint8_t sec_id = bta_jv_alloc_sec_id(); tBTA_JV_L2CAP_CL_INIT evt_data; evt_data.sec_id = sec_id; evt_data.status = BTA_JV_FAILURE; if (sec_id) { /* PSM checking is not required for LE COC */ if ((cc->type != BTA_JV_CONN_TYPE_L2CAP) || (bta_jv_check_psm(cc->remote_psm))) /* allowed */ if ((type != BTA_JV_CONN_TYPE_L2CAP) || (bta_jv_check_psm(remote_psm))) /* allowed */ { handle = GAP_ConnOpen("", sec_id, 0, &cc->peer_bd_addr, cc->remote_psm, &cfg, ertm_info, cc->sec_mask, chan_mode_mask, bta_jv_l2cap_client_cback, cc->type); handle = GAP_ConnOpen("", sec_id, 0, &peer_bd_addr, remote_psm, &cfg, ertm_info.get(), sec_mask, chan_mode_mask, bta_jv_l2cap_client_cback, type); if (handle != GAP_INVALID_HANDLE) { evt_data.status = BTA_JV_SUCCESS; } Loading @@ -982,10 +971,11 @@ void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data) { } if (evt_data.status == BTA_JV_SUCCESS) { tBTA_JV_L2C_CB* p_cb; p_cb = &bta_jv_cb.l2c_cb[handle]; p_cb->handle = handle; p_cb->p_cback = cc->p_cback; p_cb->l2cap_socket_id = cc->l2cap_socket_id; p_cb->p_cback = p_cback; p_cb->l2cap_socket_id = l2cap_socket_id; p_cb->psm = 0; /* not a server */ p_cb->sec_id = sec_id; p_cb->state = BTA_JV_ST_CL_OPENING; Loading @@ -994,10 +984,10 @@ void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data) { } evt_data.handle = handle; if (cc->p_cback) { if (p_cback) { tBTA_JV bta_jv; bta_jv.l2c_cl_init = evt_data; cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &bta_jv, cc->l2cap_socket_id); p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &bta_jv, l2cap_socket_id); } } Loading system/bta/jv/bta_jv_api.cc +11 −25 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ * ******************************************************************************/ #include <base/bind.h> #include <base/bind_helpers.h> #include <string.h> #include "bt_common.h" Loading Loading @@ -296,34 +297,19 @@ tBTA_JV_STATUS BTA_JvL2capConnect( tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id) { APPL_TRACE_API("%s", __func__); if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ if (!p_cback) return BTA_JV_FAILURE; /* Nothing to do */ tBTA_JV_API_L2CAP_CONNECT* p_msg = (tBTA_JV_API_L2CAP_CONNECT*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CONNECT)); p_msg->hdr.event = BTA_JV_API_L2CAP_CONNECT_EVT; p_msg->type = conn_type; p_msg->sec_mask = sec_mask; p_msg->role = role; p_msg->remote_psm = remote_psm; p_msg->rx_mtu = rx_mtu; if (cfg != NULL) { p_msg->has_cfg = true; p_msg->cfg = *cfg; } else { p_msg->has_cfg = false; } if (ertm_info != NULL) { p_msg->has_ertm_info = true; p_msg->ertm_info = *ertm_info; } else { p_msg->has_ertm_info = false; } p_msg->peer_bd_addr = peer_bd_addr; p_msg->p_cback = p_cback; p_msg->l2cap_socket_id = l2cap_socket_id; std::unique_ptr<tL2CAP_CFG_INFO> cfg_copy; if (cfg) cfg_copy = std::make_unique<tL2CAP_CFG_INFO>(*cfg); bta_sys_sendmsg(p_msg); std::unique_ptr<tL2CAP_ERTM_INFO> ertm_info_copy; if (ertm_info) ertm_info_copy = std::make_unique<tL2CAP_ERTM_INFO>(*ertm_info); do_in_bta_thread( FROM_HERE, Bind(&bta_jv_l2cap_connect, conn_type, sec_mask, role, remote_psm, rx_mtu, peer_bd_addr, base::Passed(&cfg_copy), base::Passed(&ertm_info_copy), p_cback, l2cap_socket_id)); return BTA_JV_SUCCESS; } Loading system/bta/jv/bta_jv_int.h +10 −24 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ #include "port_api.h" #include "rfcdefs.h" #include <memory> /***************************************************************************** * Constants ****************************************************************************/ Loading @@ -37,7 +39,6 @@ enum { /* these events are handled by the state machine */ BTA_JV_API_START_DISCOVERY_EVT = BTA_SYS_EVT_START(BTA_ID_JV), 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, Loading Loading @@ -138,27 +139,6 @@ typedef struct { int curr_sess; /* current sessions count*/ } tBTA_JV_RFC_CB; /* data type for BTA_JV_API_L2CAP_CONNECT_EVT */ typedef struct { BT_HDR hdr; int32_t type; /* One of BTA_JV_CONN_TYPE_ */ tBTA_SEC sec_mask; tBTA_JV_ROLE role; union { uint16_t remote_psm; uint16_t remote_chan; }; uint16_t rx_mtu; RawAddress peer_bd_addr; int32_t has_cfg; tL2CAP_CFG_INFO cfg; int32_t has_ertm_info; tL2CAP_ERTM_INFO ertm_info; tBTA_JV_L2CAP_CBACK* p_cback; uint32_t l2cap_socket_id; } tBTA_JV_API_L2CAP_CONNECT; /* data type for BTA_JV_API_L2CAP_SERVER_EVT */ typedef struct { BT_HDR hdr; Loading Loading @@ -282,7 +262,6 @@ typedef union { /* GKI event buffer header */ BT_HDR hdr; tBTA_JV_API_START_DISCOVERY start_discovery; 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; Loading Loading @@ -340,7 +319,14 @@ extern void bta_jv_free_scn(int32_t type, uint16_t scn); extern void bta_jv_start_discovery(tBTA_JV_MSG* p_data); extern void bta_jv_create_record(uint32_t rfcomm_slot_id); extern void bta_jv_delete_record(uint32_t handle); extern void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data); extern void bta_jv_l2cap_connect(int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t remote_psm, uint16_t rx_mtu, const RawAddress& peer_bd_addr, std::unique_ptr<tL2CAP_CFG_INFO> cfg, std::unique_ptr<tL2CAP_ERTM_INFO> ertm_info, tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id); 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); Loading system/bta/jv/bta_jv_main.cc +0 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ typedef void (*tBTA_JV_ACTION)(tBTA_JV_MSG* p_data); /* action function list */ const tBTA_JV_ACTION bta_jv_action[] = { bta_jv_start_discovery, /* BTA_JV_API_START_DISCOVERY_EVT */ bta_jv_l2cap_connect, /* BTA_JV_API_L2CAP_CONNECT_EVT */ bta_jv_l2cap_close, /* BTA_JV_API_L2CAP_CLOSE_EVT */ bta_jv_l2cap_start_server, /* BTA_JV_API_L2CAP_START_SERVER_EVT */ bta_jv_l2cap_stop_server, /* BTA_JV_API_L2CAP_STOP_SERVER_EVT */ Loading Loading
system/bta/jv/bta_jv_act.cc +25 −35 Original line number Diff line number Diff line Loading @@ -922,59 +922,48 @@ static void bta_jv_l2cap_client_cback(uint16_t gap_handle, uint16_t event) { } } /******************************************************************************* * * Function bta_jv_l2cap_connect * * Description makes an l2cap client connection * * Returns void * ******************************************************************************/ void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data) { tBTA_JV_L2C_CB* p_cb; tBTA_JV_L2CAP_CL_INIT evt_data; /* makes an l2cap client connection */ void bta_jv_l2cap_connect(int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t remote_psm, uint16_t rx_mtu, const RawAddress& peer_bd_addr, std::unique_ptr<tL2CAP_CFG_INFO> cfg_param, std::unique_ptr<tL2CAP_ERTM_INFO> ertm_info, tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id) { uint16_t handle = GAP_INVALID_HANDLE; uint8_t sec_id; tL2CAP_CFG_INFO cfg; tBTA_JV_API_L2CAP_CONNECT* cc = &(p_data->l2cap_connect); uint8_t chan_mode_mask = GAP_FCR_CHAN_OPT_BASIC; tL2CAP_ERTM_INFO* ertm_info = NULL; tL2CAP_CFG_INFO cfg; memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); if (cc->has_cfg) { cfg = cc->cfg; if (cfg_param) { cfg = *cfg_param; if (cfg.fcr_present && cfg.fcr.mode == L2CAP_FCR_ERTM_MODE) { chan_mode_mask = GAP_FCR_CHAN_OPT_ERTM; } } if (cc->has_ertm_info) { ertm_info = &(cc->ertm_info); } /* We need to use this value for MTU to be able to handle cases where cfg is * not set in req. */ cfg.mtu_present = true; cfg.mtu = cc->rx_mtu; cfg.mtu = rx_mtu; /* TODO: DM role manager L2CA_SetDesireRole(cc->role); L2CA_SetDesireRole(role); */ sec_id = bta_jv_alloc_sec_id(); uint8_t sec_id = bta_jv_alloc_sec_id(); tBTA_JV_L2CAP_CL_INIT evt_data; evt_data.sec_id = sec_id; evt_data.status = BTA_JV_FAILURE; if (sec_id) { /* PSM checking is not required for LE COC */ if ((cc->type != BTA_JV_CONN_TYPE_L2CAP) || (bta_jv_check_psm(cc->remote_psm))) /* allowed */ if ((type != BTA_JV_CONN_TYPE_L2CAP) || (bta_jv_check_psm(remote_psm))) /* allowed */ { handle = GAP_ConnOpen("", sec_id, 0, &cc->peer_bd_addr, cc->remote_psm, &cfg, ertm_info, cc->sec_mask, chan_mode_mask, bta_jv_l2cap_client_cback, cc->type); handle = GAP_ConnOpen("", sec_id, 0, &peer_bd_addr, remote_psm, &cfg, ertm_info.get(), sec_mask, chan_mode_mask, bta_jv_l2cap_client_cback, type); if (handle != GAP_INVALID_HANDLE) { evt_data.status = BTA_JV_SUCCESS; } Loading @@ -982,10 +971,11 @@ void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data) { } if (evt_data.status == BTA_JV_SUCCESS) { tBTA_JV_L2C_CB* p_cb; p_cb = &bta_jv_cb.l2c_cb[handle]; p_cb->handle = handle; p_cb->p_cback = cc->p_cback; p_cb->l2cap_socket_id = cc->l2cap_socket_id; p_cb->p_cback = p_cback; p_cb->l2cap_socket_id = l2cap_socket_id; p_cb->psm = 0; /* not a server */ p_cb->sec_id = sec_id; p_cb->state = BTA_JV_ST_CL_OPENING; Loading @@ -994,10 +984,10 @@ void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data) { } evt_data.handle = handle; if (cc->p_cback) { if (p_cback) { tBTA_JV bta_jv; bta_jv.l2c_cl_init = evt_data; cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &bta_jv, cc->l2cap_socket_id); p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &bta_jv, l2cap_socket_id); } } Loading
system/bta/jv/bta_jv_api.cc +11 −25 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ * ******************************************************************************/ #include <base/bind.h> #include <base/bind_helpers.h> #include <string.h> #include "bt_common.h" Loading Loading @@ -296,34 +297,19 @@ tBTA_JV_STATUS BTA_JvL2capConnect( tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id) { APPL_TRACE_API("%s", __func__); if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ if (!p_cback) return BTA_JV_FAILURE; /* Nothing to do */ tBTA_JV_API_L2CAP_CONNECT* p_msg = (tBTA_JV_API_L2CAP_CONNECT*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CONNECT)); p_msg->hdr.event = BTA_JV_API_L2CAP_CONNECT_EVT; p_msg->type = conn_type; p_msg->sec_mask = sec_mask; p_msg->role = role; p_msg->remote_psm = remote_psm; p_msg->rx_mtu = rx_mtu; if (cfg != NULL) { p_msg->has_cfg = true; p_msg->cfg = *cfg; } else { p_msg->has_cfg = false; } if (ertm_info != NULL) { p_msg->has_ertm_info = true; p_msg->ertm_info = *ertm_info; } else { p_msg->has_ertm_info = false; } p_msg->peer_bd_addr = peer_bd_addr; p_msg->p_cback = p_cback; p_msg->l2cap_socket_id = l2cap_socket_id; std::unique_ptr<tL2CAP_CFG_INFO> cfg_copy; if (cfg) cfg_copy = std::make_unique<tL2CAP_CFG_INFO>(*cfg); bta_sys_sendmsg(p_msg); std::unique_ptr<tL2CAP_ERTM_INFO> ertm_info_copy; if (ertm_info) ertm_info_copy = std::make_unique<tL2CAP_ERTM_INFO>(*ertm_info); do_in_bta_thread( FROM_HERE, Bind(&bta_jv_l2cap_connect, conn_type, sec_mask, role, remote_psm, rx_mtu, peer_bd_addr, base::Passed(&cfg_copy), base::Passed(&ertm_info_copy), p_cback, l2cap_socket_id)); return BTA_JV_SUCCESS; } Loading
system/bta/jv/bta_jv_int.h +10 −24 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ #include "port_api.h" #include "rfcdefs.h" #include <memory> /***************************************************************************** * Constants ****************************************************************************/ Loading @@ -37,7 +39,6 @@ enum { /* these events are handled by the state machine */ BTA_JV_API_START_DISCOVERY_EVT = BTA_SYS_EVT_START(BTA_ID_JV), 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, Loading Loading @@ -138,27 +139,6 @@ typedef struct { int curr_sess; /* current sessions count*/ } tBTA_JV_RFC_CB; /* data type for BTA_JV_API_L2CAP_CONNECT_EVT */ typedef struct { BT_HDR hdr; int32_t type; /* One of BTA_JV_CONN_TYPE_ */ tBTA_SEC sec_mask; tBTA_JV_ROLE role; union { uint16_t remote_psm; uint16_t remote_chan; }; uint16_t rx_mtu; RawAddress peer_bd_addr; int32_t has_cfg; tL2CAP_CFG_INFO cfg; int32_t has_ertm_info; tL2CAP_ERTM_INFO ertm_info; tBTA_JV_L2CAP_CBACK* p_cback; uint32_t l2cap_socket_id; } tBTA_JV_API_L2CAP_CONNECT; /* data type for BTA_JV_API_L2CAP_SERVER_EVT */ typedef struct { BT_HDR hdr; Loading Loading @@ -282,7 +262,6 @@ typedef union { /* GKI event buffer header */ BT_HDR hdr; tBTA_JV_API_START_DISCOVERY start_discovery; 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; Loading Loading @@ -340,7 +319,14 @@ extern void bta_jv_free_scn(int32_t type, uint16_t scn); extern void bta_jv_start_discovery(tBTA_JV_MSG* p_data); extern void bta_jv_create_record(uint32_t rfcomm_slot_id); extern void bta_jv_delete_record(uint32_t handle); extern void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data); extern void bta_jv_l2cap_connect(int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t remote_psm, uint16_t rx_mtu, const RawAddress& peer_bd_addr, std::unique_ptr<tL2CAP_CFG_INFO> cfg, std::unique_ptr<tL2CAP_ERTM_INFO> ertm_info, tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id); 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); Loading
system/bta/jv/bta_jv_main.cc +0 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ typedef void (*tBTA_JV_ACTION)(tBTA_JV_MSG* p_data); /* action function list */ const tBTA_JV_ACTION bta_jv_action[] = { bta_jv_start_discovery, /* BTA_JV_API_START_DISCOVERY_EVT */ bta_jv_l2cap_connect, /* BTA_JV_API_L2CAP_CONNECT_EVT */ bta_jv_l2cap_close, /* BTA_JV_API_L2CAP_CLOSE_EVT */ bta_jv_l2cap_start_server, /* BTA_JV_API_L2CAP_START_SERVER_EVT */ bta_jv_l2cap_stop_server, /* BTA_JV_API_L2CAP_STOP_SERVER_EVT */ Loading