Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 885ba307 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Use Bind in BTA_JvRfcommConnect

Bug: 68359837
Test: compilation test
Change-Id: I0e567cbe573c94574cc5f384cddf697dc2337109
parent 7b0c5703
Loading
Loading
Loading
Loading
+19 −26
Original line number Diff line number Diff line
@@ -1341,57 +1341,50 @@ static void bta_jv_port_event_cl_cback(uint32_t code, uint16_t port_handle) {
  }
}

/*******************************************************************************
 *
 * Function     bta_jv_rfcomm_connect
 *
 * Description  Client initiates an RFCOMM connection
 *
 * Returns      void
 *
 ******************************************************************************/
void bta_jv_rfcomm_connect(tBTA_JV_MSG* p_data) {
/* Client initiates an RFCOMM connection */
void bta_jv_rfcomm_connect(tBTA_SEC sec_mask, tBTA_JV_ROLE role,
                           uint8_t remote_scn, const RawAddress& peer_bd_addr,
                           tBTA_JV_RFCOMM_CBACK* p_cback,
                           uint32_t rfcomm_slot_id) {
  uint16_t handle = 0;
  uint32_t event_mask = BTA_JV_RFC_EV_MASK;
  tPORT_STATE port_state;
  uint8_t sec_id = 0;
  tBTA_JV_RFC_CB* p_cb = NULL;
  tBTA_JV_PCB* p_pcb;
  tBTA_JV_API_RFCOMM_CONNECT* cc = &(p_data->rfcomm_connect);
  tBTA_JV_RFCOMM_CL_INIT evt_data;

  /* 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_RFCOMM_CL_INIT evt_data;
  memset(&evt_data, 0, sizeof(evt_data));
  evt_data.sec_id = sec_id;
  evt_data.status = BTA_JV_SUCCESS;
  if (0 == sec_id ||
      !BTM_SetSecurityLevel(true, "", sec_id, cc->sec_mask, BT_PSM_RFCOMM,
                            BTM_SEC_PROTO_RFCOMM, cc->remote_scn)) {
      !BTM_SetSecurityLevel(true, "", sec_id, sec_mask, BT_PSM_RFCOMM,
                            BTM_SEC_PROTO_RFCOMM, remote_scn)) {
    evt_data.status = BTA_JV_FAILURE;
    APPL_TRACE_ERROR(
        "sec_id:%d is zero or BTM_SetSecurityLevel failed, remote_scn:%d",
        sec_id, cc->remote_scn);
        sec_id, remote_scn);
  }

  if (evt_data.status == BTA_JV_SUCCESS &&
      RFCOMM_CreateConnection(UUID_SERVCLASS_SERIAL_PORT, cc->remote_scn, false,
                              BTA_JV_DEF_RFC_MTU, cc->peer_bd_addr, &handle,
      RFCOMM_CreateConnection(UUID_SERVCLASS_SERIAL_PORT, remote_scn, false,
                              BTA_JV_DEF_RFC_MTU, peer_bd_addr, &handle,
                              bta_jv_port_mgmt_cl_cback) != PORT_SUCCESS) {
    APPL_TRACE_ERROR("bta_jv_rfcomm_connect, RFCOMM_CreateConnection failed");
    evt_data.status = BTA_JV_FAILURE;
  }
  if (evt_data.status == BTA_JV_SUCCESS) {
    p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb);
    tBTA_JV_PCB* p_pcb;
    tBTA_JV_RFC_CB* p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb);
    if (p_cb) {
      p_cb->p_cback = cc->p_cback;
      p_cb->p_cback = p_cback;
      p_cb->sec_id = sec_id;
      p_cb->scn = 0;
      p_pcb->state = BTA_JV_ST_CL_OPENING;
      p_pcb->rfcomm_slot_id = cc->rfcomm_slot_id;
      p_pcb->rfcomm_slot_id = rfcomm_slot_id;
      evt_data.use_co = true;

      PORT_SetEventCallback(handle, bta_jv_port_event_cl_cback);
@@ -1412,7 +1405,7 @@ void bta_jv_rfcomm_connect(tBTA_JV_MSG* p_data) {
  }
  tBTA_JV bta_jv;
  bta_jv.rfc_cl_init = evt_data;
  cc->p_cback(BTA_JV_RFCOMM_CL_INIT_EVT, &bta_jv, cc->rfcomm_slot_id);
  p_cback(BTA_JV_RFCOMM_CL_INIT_EVT, &bta_jv, rfcomm_slot_id);
  if (bta_jv.rfc_cl_init.status == BTA_JV_FAILURE) {
    if (sec_id) bta_jv_free_sec_id(&sec_id);
    if (handle) RFCOMM_RemoveConnection(handle);
+4 −13
Original line number Diff line number Diff line
@@ -597,20 +597,11 @@ tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, tBTA_JV_ROLE role,
                                   uint32_t rfcomm_slot_id) {
  APPL_TRACE_API("%s", __func__);

  if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */

  tBTA_JV_API_RFCOMM_CONNECT* p_msg = (tBTA_JV_API_RFCOMM_CONNECT*)osi_malloc(
      sizeof(tBTA_JV_API_RFCOMM_CONNECT));
  p_msg->hdr.event = BTA_JV_API_RFCOMM_CONNECT_EVT;
  p_msg->sec_mask = sec_mask;
  p_msg->role = role;
  p_msg->remote_scn = remote_scn;
  p_msg->peer_bd_addr = peer_bd_addr;
  p_msg->p_cback = p_cback;
  p_msg->rfcomm_slot_id = rfcomm_slot_id;

  bta_sys_sendmsg(p_msg);
  if (!p_cback) return BTA_JV_FAILURE; /* Nothing to do */

  do_in_bta_thread(FROM_HERE,
                   Bind(&bta_jv_rfcomm_connect, sec_mask, role, remote_scn,
                        peer_bd_addr, p_cback, rfcomm_slot_id));
  return BTA_JV_SUCCESS;
}

+5 −14
Original line number Diff line number Diff line
@@ -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_RFCOMM_CONNECT_EVT,
  BTA_JV_API_RFCOMM_CLOSE_EVT,
  BTA_JV_API_RFCOMM_START_SERVER_EVT,
  BTA_JV_API_RFCOMM_STOP_SERVER_EVT,
@@ -141,17 +140,6 @@ typedef struct {
  uint32_t l2cap_socket_id;
} tBTA_JV_API_L2CAP_READ;

/* data type for BTA_JV_API_RFCOMM_CONNECT_EVT */
typedef struct {
  BT_HDR hdr;
  tBTA_SEC sec_mask;
  tBTA_JV_ROLE role;
  uint8_t remote_scn;
  RawAddress peer_bd_addr;
  tBTA_JV_RFCOMM_CBACK* p_cback;
  uint32_t rfcomm_slot_id;
} tBTA_JV_API_RFCOMM_CONNECT;

/* data type for BTA_JV_API_RFCOMM_SERVER_EVT */
typedef struct {
  BT_HDR hdr;
@@ -205,7 +193,6 @@ typedef union {
  BT_HDR hdr;
  tBTA_JV_API_START_DISCOVERY start_discovery;
  tBTA_JV_API_L2CAP_READ l2cap_read;
  tBTA_JV_API_RFCOMM_CONNECT rfcomm_connect;
  tBTA_JV_API_RFCOMM_WRITE rfcomm_write;
  tBTA_JV_API_SET_PM_PROFILE set_pm;
  tBTA_JV_API_PM_STATE_CHANGE change_pm_state;
@@ -276,7 +263,11 @@ extern void bta_jv_l2cap_stop_server(uint16_t local_psm,
extern void bta_jv_l2cap_write(uint32_t handle, uint32_t req_id,
                               uint8_t* p_data, uint16_t len, uint32_t user_id,
                               tBTA_JV_L2C_CB* p_cb);
extern void bta_jv_rfcomm_connect(tBTA_JV_MSG* p_data);
extern void bta_jv_rfcomm_connect(tBTA_SEC sec_mask, tBTA_JV_ROLE role,
                                  uint8_t remote_scn,
                                  const RawAddress& peer_bd_addr,
                                  tBTA_JV_RFCOMM_CBACK* p_cback,
                                  uint32_t rfcomm_slot_id);
extern void bta_jv_rfcomm_close(tBTA_JV_MSG* p_data);
extern void bta_jv_rfcomm_start_server(tBTA_JV_MSG* p_data);
extern void bta_jv_rfcomm_stop_server(tBTA_JV_MSG* p_data);
+0 −1
Original line number Diff line number Diff line
@@ -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_rfcomm_connect,        /* BTA_JV_API_RFCOMM_CONNECT_EVT */
    bta_jv_rfcomm_close,          /* BTA_JV_API_RFCOMM_CLOSE_EVT */
    bta_jv_rfcomm_start_server,   /* BTA_JV_API_RFCOMM_START_SERVER_EVT */
    bta_jv_rfcomm_stop_server,    /* BTA_JV_API_RFCOMM_STOP_SERVER_EVT */