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

Commit 6de5c6ed authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Use Bind in BTA_JvStartDiscovery

Bug: 68359837
Test: compilation test
Change-Id: I34279fb831ebc9dcf839f7c7339a50dda57a4246
parent 01e5a45c
Loading
Loading
Loading
Loading
+14 −25
Original line number Diff line number Diff line
@@ -778,16 +778,10 @@ static void bta_jv_start_discovery_cback(uint16_t result, void* user_data) {
  }
}

/*******************************************************************************
 *
 * Function     bta_jv_start_discovery
 *
 * Description  Discovers services on a remote device
 *
 * Returns      void
 *
 ******************************************************************************/
void bta_jv_start_discovery(tBTA_JV_MSG* p_data) {
/* Discovers services on a remote device */
void bta_jv_start_discovery(const RawAddress& bd_addr, uint16_t num_uuid,
                            bluetooth::Uuid* uuid_list,
                            uint32_t rfcomm_slot_id) {
  tBTA_JV_STATUS status = BTA_JV_FAILURE;
  APPL_TRACE_DEBUG("bta_jv_start_discovery in, sdp_active:%d",
                   bta_jv_cb.sdp_active);
@@ -797,42 +791,37 @@ void bta_jv_start_discovery(tBTA_JV_MSG* p_data) {
    if (bta_jv_cb.p_dm_cback) {
      tBTA_JV bta_jv;
      bta_jv.status = status;
      bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, &bta_jv,
                           p_data->start_discovery.rfcomm_slot_id);
      bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, &bta_jv, rfcomm_slot_id);
    }
    return;
  }

  /* init the database/set up the filter */
  APPL_TRACE_DEBUG(
      "call SDP_InitDiscoveryDb, p_data->start_discovery.num_uuid:%d",
      p_data->start_discovery.num_uuid);
  APPL_TRACE_DEBUG("call SDP_InitDiscoveryDb, num_uuid:%d", num_uuid);
  SDP_InitDiscoveryDb(p_bta_jv_cfg->p_sdp_db, p_bta_jv_cfg->sdp_db_size,
                      p_data->start_discovery.num_uuid,
                      p_data->start_discovery.uuid_list, 0, NULL);
                      num_uuid, uuid_list, 0, NULL);

  /* tell SDP to keep the raw data */
  p_bta_jv_cfg->p_sdp_db->raw_data = p_bta_jv_cfg->p_sdp_raw_data;
  p_bta_jv_cfg->p_sdp_db->raw_size = p_bta_jv_cfg->sdp_raw_size;

  bta_jv_cb.p_sel_raw_data = 0;
  bta_jv_cb.uuid = p_data->start_discovery.uuid_list[0];
  bta_jv_cb.uuid = uuid_list[0];

  bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_YES;

  uint32_t* rfcomm_slot_id = (uint32_t*)osi_malloc(sizeof(uint32_t));
  *rfcomm_slot_id = p_data->start_discovery.rfcomm_slot_id;
  uint32_t* rfcomm_slot_id_copy = (uint32_t*)osi_malloc(sizeof(uint32_t));
  *rfcomm_slot_id_copy = rfcomm_slot_id;

  if (!SDP_ServiceSearchAttributeRequest2(
          p_data->start_discovery.bd_addr, p_bta_jv_cfg->p_sdp_db,
          bta_jv_start_discovery_cback, (void*)rfcomm_slot_id)) {
  if (!SDP_ServiceSearchAttributeRequest2(bd_addr, p_bta_jv_cfg->p_sdp_db,
                                          bta_jv_start_discovery_cback,
                                          (void*)rfcomm_slot_id_copy)) {
    bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE;
    /* failed to start SDP. report the failure right away */
    if (bta_jv_cb.p_dm_cback) {
      tBTA_JV bta_jv;
      bta_jv.status = status;
      bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, &bta_jv,
                           p_data->start_discovery.rfcomm_slot_id);
      bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, &bta_jv, rfcomm_slot_id);
    }
  }
  /*
+5 −11
Original line number Diff line number Diff line
@@ -190,20 +190,14 @@ tBTA_JV_STATUS BTA_JvFreeChannel(uint16_t channel, int conn_type) {
tBTA_JV_STATUS BTA_JvStartDiscovery(const RawAddress& bd_addr,
                                    uint16_t num_uuid, const Uuid* p_uuid_list,
                                    uint32_t rfcomm_slot_id) {
  tBTA_JV_API_START_DISCOVERY* p_msg = (tBTA_JV_API_START_DISCOVERY*)osi_malloc(
      sizeof(tBTA_JV_API_START_DISCOVERY));

  APPL_TRACE_API("%s", __func__);

  p_msg->hdr.event = BTA_JV_API_START_DISCOVERY_EVT;
  p_msg->bd_addr = bd_addr;
  p_msg->num_uuid = num_uuid;
  memcpy(p_msg->uuid_list, p_uuid_list, num_uuid * sizeof(Uuid));
  p_msg->num_attr = 0;
  p_msg->rfcomm_slot_id = rfcomm_slot_id;

  bta_sys_sendmsg(p_msg);
  Uuid* uuid_list_copy = new Uuid[num_uuid];
  memcpy(uuid_list_copy, p_uuid_list, num_uuid * sizeof(Uuid));

  do_in_bta_thread(FROM_HERE,
                   Bind(&bta_jv_start_discovery, bd_addr, num_uuid,
                        base::Owned(uuid_list_copy), rfcomm_slot_id));
  return BTA_JV_SUCCESS;
}

+4 −15
Original line number Diff line number Diff line
@@ -38,8 +38,7 @@

enum {
  /* these events are handled by the state machine */
  BTA_JV_API_START_DISCOVERY_EVT = BTA_SYS_EVT_START(BTA_ID_JV),
  BTA_JV_MAX_INT_EVT
  BTA_JV_MAX_INT_EVT = BTA_SYS_EVT_START(BTA_ID_JV),
};

#ifndef BTA_JV_RFC_EV_MASK
@@ -47,17 +46,6 @@ enum {
  (PORT_EV_RXCHAR | PORT_EV_TXEMPTY | PORT_EV_FC | PORT_EV_FCS)
#endif

/* data type for BTA_JV_API_START_DISCOVERY_EVT */
typedef struct {
  BT_HDR hdr;
  RawAddress bd_addr;
  uint16_t num_uuid;
  bluetooth::Uuid uuid_list[BTA_JV_MAX_UUIDS];
  uint16_t num_attr;
  uint16_t attr_list[BTA_JV_MAX_ATTRS];
  uint32_t rfcomm_slot_id;
} tBTA_JV_API_START_DISCOVERY;

enum {
  BTA_JV_PM_FREE_ST = 0, /* empty PM slot */
  BTA_JV_PM_IDLE_ST,
@@ -138,7 +126,6 @@ typedef struct {
typedef union {
  /* GKI event buffer header */
  BT_HDR hdr;
  tBTA_JV_API_START_DISCOVERY start_discovery;
  tBTA_JV_API_L2CAP_READ l2cap_read;
} tBTA_JV_MSG;

@@ -183,7 +170,9 @@ extern void bta_jv_get_channel_id(int32_t type, int32_t channel,
                                  uint32_t l2cap_socket_id,
                                  uint32_t rfcomm_slot_id);
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_start_discovery(const RawAddress& bd_addr, uint16_t num_uuid,
                                   bluetooth::Uuid* uuid_list,
                                   uint32_t rfcomm_slot_id);
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(int32_t type, tBTA_SEC sec_mask,
+0 −1
Original line number Diff line number Diff line
@@ -41,7 +41,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 */
};

/*******************************************************************************