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

Commit bb9fe5de authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Style improvements in bta_dm_discover_services" into main

parents d912922f 460c3614
Loading
Loading
Loading
Loading
+51 −91
Original line number Diff line number Diff line
@@ -90,8 +90,6 @@ static void bta_dm_gatt_disc_complete(uint16_t conn_id, tGATT_STATUS status);
static void bta_dm_find_services(const RawAddress& bd_addr);
static void bta_dm_sdp_callback(const RawAddress& bd_addr,
                                tSDP_STATUS sdp_status);
static void bta_dm_discover_services(const RawAddress& remote_bd_addr,
                                     tBT_TRANSPORT transport);
static void bta_dm_disable_disc(void);
static void bta_dm_gattc_register(void);
static void btm_dm_start_gatt_discovery(const RawAddress& bd_addr);
@@ -281,30 +279,6 @@ static tBTA_DM_SERVICE_DISCOVERY_STATE bta_dm_discovery_get_state() {
// TODO. Currently we did nothing
static void bta_dm_discovery_cancel() {}

/*******************************************************************************
 *
 * Function         bta_dm_discover
 *
 * Description      Discovers services on a remote device
 *
 *
 * Returns          void
 *
 ******************************************************************************/
static void bta_dm_discover(tBTA_DM_API_DISCOVER& discover) {
  bta_dm_gattc_register();

  bta_dm_discovery_cb.service_search_cbacks = discover.cbacks;
  bta_dm_discovery_cb.services_to_search = BTA_ALL_SERVICE_MASK;
  bta_dm_discovery_cb.service_index = 0;
  bta_dm_discovery_cb.services_found = 0;

  log::info(
      "bta_dm_discovery: starting service discovery to {} , transport: {}",
      discover.bd_addr, bt_transport_text(discover.transport));
  bta_dm_discover_services(discover.bd_addr, discover.transport);
}

/*******************************************************************************
 *
 * Function         bta_dm_disable_search_and_disc
@@ -861,79 +835,65 @@ static tBT_TRANSPORT bta_dm_determine_discovery_transport(
  return BT_TRANSPORT_BR_EDR;
}

static void bta_dm_discover_services(const RawAddress& remote_bd_addr,
                                     tBT_TRANSPORT transport) {
  if (transport == BT_TRANSPORT_AUTO) {
    transport = bta_dm_determine_discovery_transport(remote_bd_addr);
  }
/* Discovers services on a remote device */
static void bta_dm_discover_services(tBTA_DM_API_DISCOVER& discover) {
  bta_dm_gattc_register();

  log::verbose("BDA: {}, transport={}, state = {}", remote_bd_addr, transport,
               bta_dm_discovery_get_state());
  RawAddress bd_addr = discover.bd_addr;
  tBT_TRANSPORT transport = (discover.transport == BT_TRANSPORT_AUTO)
                                ? bta_dm_determine_discovery_transport(bd_addr)
                                : discover.transport;

  bta_dm_discovery_cb.peer_bdaddr = remote_bd_addr;
  log::info("starting service discovery to: {}, transport: {}", bd_addr,
            bt_transport_text(transport));

  bta_dm_discovery_cb.service_search_cbacks = discover.cbacks;
  bta_dm_discovery_cb.services_to_search = BTA_ALL_SERVICE_MASK;
  bta_dm_discovery_cb.service_index = 0;
  bta_dm_discovery_cb.services_found = 0;

  bool sdp_disable = HID_HostSDPDisable(remote_bd_addr);
  if (sdp_disable)
    log::debug("peer:{} with HIDSDPDisable attribute.", remote_bd_addr);
  bta_dm_discovery_cb.peer_bdaddr = bd_addr;

  /* if application wants to discover service and HIDSDPDisable attribute is
     false.
     Classic mouses with this attribute should not start SDP here, because the
  /* Classic mouses with this attribute should not start SDP here, because the
    SDP has been done during bonding. SDP request here will interleave with
    connections to the Control or Interrupt channels */
  if (!sdp_disable) {
    BTM_LogHistory(kBtmLogTag, remote_bd_addr, "Discovery started ",
                   base::StringPrintf("Transport:%s",
                                      bt_transport_text(transport).c_str()));

    /* initialize variables */
    bta_dm_discovery_cb.service_index = 0;
    bta_dm_discovery_cb.services_found = 0;
    bta_dm_discovery_cb.services_to_search = BTA_ALL_SERVICE_MASK;
  if (HID_HostSDPDisable(bd_addr)) {
    log::info("peer:{} with HIDSDPDisable attribute.", bd_addr);

    /* if seaching with EIR is not completed */
    if (bta_dm_discovery_cb.services_to_search) {
      /* check whether connection already exists to the device
         if connection exists, we don't have to wait for ACL
         link to go down to start search on next device */
      if (transport == BT_TRANSPORT_BR_EDR) {
        if (get_btm_client_interface().peer.BTM_IsAclConnectionUp(
                bta_dm_discovery_cb.peer_bdaddr, BT_TRANSPORT_BR_EDR))
          bta_dm_discovery_cb.wait_disc = false;
        else
          bta_dm_discovery_cb.wait_disc = true;
    /* service discovery is done for this device */
    bta_dm_disc_sm_execute(
        BTA_DM_DISCOVERY_RESULT_EVT,
        std::make_unique<tBTA_DM_MSG>(tBTA_DM_SVC_RES{
            .bd_addr = bd_addr, .services = 0, .result = BTA_SUCCESS}));
    return;
  }

  BTM_LogHistory(
      kBtmLogTag, bd_addr, "Discovery started ",
      base::StringPrintf("Transport:%s", bt_transport_text(transport).c_str()));

  if (transport == BT_TRANSPORT_LE) {
        if (bta_dm_discovery_cb.services_to_search & BTA_BLE_SERVICE_MASK) {
          log::info("bta_dm_discovery: starting GATT discovery on {}",
                    bta_dm_discovery_cb.peer_bdaddr);
    log::info("starting GATT discovery on {}", bd_addr);
    // set the raw data buffer here
    memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf));
    /* start GATT for service discovery */
          btm_dm_start_gatt_discovery(bta_dm_discovery_cb.peer_bdaddr);
          return;
        }
      } else {
        log::info("bta_dm_discovery: starting SDP discovery on {}",
                  bta_dm_discovery_cb.peer_bdaddr);
        bta_dm_discovery_cb.sdp_results = false;
        bta_dm_find_services(bta_dm_discovery_cb.peer_bdaddr);
    btm_dm_start_gatt_discovery(bd_addr);
    return;
  }
    }
  }

  /* service discovery is done for this device */
  auto msg = std::make_unique<tBTA_DM_MSG>(tBTA_DM_SVC_RES{});
  auto& svc_result = std::get<tBTA_DM_SVC_RES>(*msg);
  // transport == BT_TRANSPORT_BR_EDR

  /* initialize the data structure */
  svc_result.result = BTA_SUCCESS;
  svc_result.services = bta_dm_discovery_cb.services_found;
  svc_result.bd_addr = bta_dm_discovery_cb.peer_bdaddr;
  /* check whether connection already exists to the device
      if connection exists, we don't have to wait for ACL
      link to go down to start search on next device */
  if (get_btm_client_interface().peer.BTM_IsAclConnectionUp(
          bd_addr, BT_TRANSPORT_BR_EDR))
    bta_dm_discovery_cb.wait_disc = false;
  else
    bta_dm_discovery_cb.wait_disc = true;

  bta_dm_disc_sm_execute(BTA_DM_DISCOVERY_RESULT_EVT, std::move(msg));
  log::info("starting SDP discovery on {}", bd_addr);
  bta_dm_discovery_cb.sdp_results = false;
  bta_dm_find_services(bd_addr);
}

/*******************************************************************************
@@ -1270,7 +1230,7 @@ static void bta_dm_disc_sm_execute(tBTA_DM_DISC_EVT event,
          log::assert_that(std::holds_alternative<tBTA_DM_API_DISCOVER>(*msg),
                           "bad message type: {}", msg->index());

          bta_dm_discover(std::get<tBTA_DM_API_DISCOVER>(*msg));
          bta_dm_discover_services(std::get<tBTA_DM_API_DISCOVER>(*msg));
          break;
        case BTA_DM_SDP_RESULT_EVT:
          bta_dm_free_sdp_db();