Loading system/bta/jv/bta_jv_act.cc +25 −37 Original line number Diff line number Diff line Loading @@ -1071,79 +1071,67 @@ static void bta_jv_l2cap_server_cback(uint16_t gap_handle, uint16_t event) { } } /******************************************************************************* * * Function bta_jv_l2cap_start_server * * Description starts an L2CAP server * * Returns void * ******************************************************************************/ void bta_jv_l2cap_start_server(tBTA_JV_MSG* p_data) { tBTA_JV_L2C_CB* p_cb; uint8_t sec_id; /** starts an L2CAP server */ void bta_jv_l2cap_start_server(int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t local_psm, uint16_t rx_mtu, 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; tL2CAP_CFG_INFO cfg; tBTA_JV_L2CAP_START evt_data; tBTA_JV_API_L2CAP_SERVER* ls = &(p_data->l2cap_server); 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 (ls->has_cfg) { cfg = ls->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 (ls->has_ertm_info) { ertm_info = &(ls->ertm_info); } // FIX: MTU=0 means not present if (ls->rx_mtu > 0) { if (rx_mtu > 0) { cfg.mtu_present = true; cfg.mtu = ls->rx_mtu; cfg.mtu = rx_mtu; } else { cfg.mtu_present = false; cfg.mtu = 0; } /* TODO DM role manager L2CA_SetDesireRole(ls->role); L2CA_SetDesireRole(role); */ sec_id = bta_jv_alloc_sec_id(); uint8_t sec_id = bta_jv_alloc_sec_id(); /* PSM checking is not required for LE COC */ if (0 == sec_id || ((ls->type == BTA_JV_CONN_TYPE_L2CAP) && (!bta_jv_check_psm(ls->local_psm))) || (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, nullptr, ls->local_psm, &cfg, ertm_info, ls->sec_mask, chan_mode_mask, bta_jv_l2cap_server_cback, ls->type)) == ((type == BTA_JV_CONN_TYPE_L2CAP) && (!bta_jv_check_psm(local_psm))) || (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, nullptr, local_psm, &cfg, ertm_info.get(), sec_mask, chan_mode_mask, bta_jv_l2cap_server_cback, type)) == GAP_INVALID_HANDLE) { bta_jv_free_sec_id(&sec_id); evt_data.status = BTA_JV_FAILURE; } else { p_cb = &bta_jv_cb.l2c_cb[handle]; tBTA_JV_L2C_CB* p_cb = &bta_jv_cb.l2c_cb[handle]; evt_data.status = BTA_JV_SUCCESS; evt_data.handle = handle; evt_data.sec_id = sec_id; p_cb->p_cback = ls->p_cback; p_cb->l2cap_socket_id = ls->l2cap_socket_id; p_cb->p_cback = p_cback; p_cb->l2cap_socket_id = l2cap_socket_id; p_cb->handle = handle; p_cb->sec_id = sec_id; p_cb->state = BTA_JV_ST_SR_LISTEN; p_cb->psm = ls->local_psm; p_cb->psm = local_psm; } if (ls->p_cback) { if (p_cback) { tBTA_JV bta_jv; bta_jv.l2c_start = evt_data; ls->p_cback(BTA_JV_L2CAP_START_EVT, &bta_jv, ls->l2cap_socket_id); p_cback(BTA_JV_L2CAP_START_EVT, &bta_jv, l2cap_socket_id); } } Loading system/bta/jv/bta_jv_api.cc +10 −24 Original line number Diff line number Diff line Loading @@ -376,33 +376,19 @@ tBTA_JV_STATUS BTA_JvL2capStartServer(int conn_type, tBTA_SEC sec_mask, 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_SERVER* p_msg = (tBTA_JV_API_L2CAP_SERVER*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); p_msg->hdr.event = BTA_JV_API_L2CAP_START_SERVER_EVT; p_msg->type = conn_type; p_msg->sec_mask = sec_mask; p_msg->role = role; p_msg->local_psm = local_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->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_start_server, conn_type, sec_mask, role, local_psm, rx_mtu, 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 +5 −2 Original line number Diff line number Diff line Loading @@ -39,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_START_SERVER_EVT, BTA_JV_API_L2CAP_STOP_SERVER_EVT, BTA_JV_API_L2CAP_READ_EVT, BTA_JV_API_L2CAP_WRITE_EVT, Loading Loading @@ -318,7 +317,11 @@ extern void bta_jv_l2cap_connect(int32_t type, tBTA_SEC sec_mask, tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id); extern void bta_jv_l2cap_close(uint32_t handle, tBTA_JV_L2C_CB* p_cb); extern void bta_jv_l2cap_start_server(tBTA_JV_MSG* p_data); extern void bta_jv_l2cap_start_server( int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t local_psm, uint16_t rx_mtu, 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); 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); 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_start_server, /* BTA_JV_API_L2CAP_START_SERVER_EVT */ bta_jv_l2cap_stop_server, /* BTA_JV_API_L2CAP_STOP_SERVER_EVT */ bta_jv_l2cap_read, /* BTA_JV_API_L2CAP_READ_EVT */ bta_jv_l2cap_write, /* BTA_JV_API_L2CAP_WRITE_EVT */ Loading Loading
system/bta/jv/bta_jv_act.cc +25 −37 Original line number Diff line number Diff line Loading @@ -1071,79 +1071,67 @@ static void bta_jv_l2cap_server_cback(uint16_t gap_handle, uint16_t event) { } } /******************************************************************************* * * Function bta_jv_l2cap_start_server * * Description starts an L2CAP server * * Returns void * ******************************************************************************/ void bta_jv_l2cap_start_server(tBTA_JV_MSG* p_data) { tBTA_JV_L2C_CB* p_cb; uint8_t sec_id; /** starts an L2CAP server */ void bta_jv_l2cap_start_server(int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t local_psm, uint16_t rx_mtu, 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; tL2CAP_CFG_INFO cfg; tBTA_JV_L2CAP_START evt_data; tBTA_JV_API_L2CAP_SERVER* ls = &(p_data->l2cap_server); 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 (ls->has_cfg) { cfg = ls->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 (ls->has_ertm_info) { ertm_info = &(ls->ertm_info); } // FIX: MTU=0 means not present if (ls->rx_mtu > 0) { if (rx_mtu > 0) { cfg.mtu_present = true; cfg.mtu = ls->rx_mtu; cfg.mtu = rx_mtu; } else { cfg.mtu_present = false; cfg.mtu = 0; } /* TODO DM role manager L2CA_SetDesireRole(ls->role); L2CA_SetDesireRole(role); */ sec_id = bta_jv_alloc_sec_id(); uint8_t sec_id = bta_jv_alloc_sec_id(); /* PSM checking is not required for LE COC */ if (0 == sec_id || ((ls->type == BTA_JV_CONN_TYPE_L2CAP) && (!bta_jv_check_psm(ls->local_psm))) || (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, nullptr, ls->local_psm, &cfg, ertm_info, ls->sec_mask, chan_mode_mask, bta_jv_l2cap_server_cback, ls->type)) == ((type == BTA_JV_CONN_TYPE_L2CAP) && (!bta_jv_check_psm(local_psm))) || (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, nullptr, local_psm, &cfg, ertm_info.get(), sec_mask, chan_mode_mask, bta_jv_l2cap_server_cback, type)) == GAP_INVALID_HANDLE) { bta_jv_free_sec_id(&sec_id); evt_data.status = BTA_JV_FAILURE; } else { p_cb = &bta_jv_cb.l2c_cb[handle]; tBTA_JV_L2C_CB* p_cb = &bta_jv_cb.l2c_cb[handle]; evt_data.status = BTA_JV_SUCCESS; evt_data.handle = handle; evt_data.sec_id = sec_id; p_cb->p_cback = ls->p_cback; p_cb->l2cap_socket_id = ls->l2cap_socket_id; p_cb->p_cback = p_cback; p_cb->l2cap_socket_id = l2cap_socket_id; p_cb->handle = handle; p_cb->sec_id = sec_id; p_cb->state = BTA_JV_ST_SR_LISTEN; p_cb->psm = ls->local_psm; p_cb->psm = local_psm; } if (ls->p_cback) { if (p_cback) { tBTA_JV bta_jv; bta_jv.l2c_start = evt_data; ls->p_cback(BTA_JV_L2CAP_START_EVT, &bta_jv, ls->l2cap_socket_id); p_cback(BTA_JV_L2CAP_START_EVT, &bta_jv, l2cap_socket_id); } } Loading
system/bta/jv/bta_jv_api.cc +10 −24 Original line number Diff line number Diff line Loading @@ -376,33 +376,19 @@ tBTA_JV_STATUS BTA_JvL2capStartServer(int conn_type, tBTA_SEC sec_mask, 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_SERVER* p_msg = (tBTA_JV_API_L2CAP_SERVER*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); p_msg->hdr.event = BTA_JV_API_L2CAP_START_SERVER_EVT; p_msg->type = conn_type; p_msg->sec_mask = sec_mask; p_msg->role = role; p_msg->local_psm = local_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->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_start_server, conn_type, sec_mask, role, local_psm, rx_mtu, 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 +5 −2 Original line number Diff line number Diff line Loading @@ -39,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_START_SERVER_EVT, BTA_JV_API_L2CAP_STOP_SERVER_EVT, BTA_JV_API_L2CAP_READ_EVT, BTA_JV_API_L2CAP_WRITE_EVT, Loading Loading @@ -318,7 +317,11 @@ extern void bta_jv_l2cap_connect(int32_t type, tBTA_SEC sec_mask, tBTA_JV_L2CAP_CBACK* p_cback, uint32_t l2cap_socket_id); extern void bta_jv_l2cap_close(uint32_t handle, tBTA_JV_L2C_CB* p_cb); extern void bta_jv_l2cap_start_server(tBTA_JV_MSG* p_data); extern void bta_jv_l2cap_start_server( int32_t type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, uint16_t local_psm, uint16_t rx_mtu, 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); 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); 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_start_server, /* BTA_JV_API_L2CAP_START_SERVER_EVT */ bta_jv_l2cap_stop_server, /* BTA_JV_API_L2CAP_STOP_SERVER_EVT */ bta_jv_l2cap_read, /* BTA_JV_API_L2CAP_READ_EVT */ bta_jv_l2cap_write, /* BTA_JV_API_L2CAP_WRITE_EVT */ Loading