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

Commit e7b262de authored by Jakub Pawłowski's avatar Jakub Pawłowski Committed by Gerrit Code Review
Browse files

Merge "BTA_DM_NAME_READ_EVT -> btif_on_name_read" into main

parents dc69b26e 5b52c1b3
Loading
Loading
Loading
Loading
+23 −21
Original line number Diff line number Diff line
@@ -485,7 +485,10 @@ static void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {

  // Callback with this property
  if (bta_dm_search_cb.p_device_search_cback != nullptr ||
      bta_dm_search_cb.service_search_cbacks.legacy != nullptr) {
      bta_dm_search_cb.service_search_cbacks.on_name_read != nullptr) {
    // Both device and service search callbacks end up sending event to java.
    // It's enough to send callback to just one of them.
    if (bta_dm_search_cb.p_device_search_cback != nullptr) {
      tBTA_DM_SEARCH search_data = {
          .disc_res =  // tBTA_DM_DISC_RES
          {
@@ -495,7 +498,8 @@ static void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {
              .device_type = {},
              .num_uuids = 0UL,
              .p_uuid_list = nullptr,
            .result = (remote_name_msg.hci_status == HCI_SUCCESS) ? BTA_SUCCESS
              .result = (remote_name_msg.hci_status == HCI_SUCCESS)
                            ? BTA_SUCCESS
                            : BTA_FAILURE,
              .hci_status = remote_name_msg.hci_status,
          },
@@ -503,14 +507,12 @@ static void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {
      if (remote_name_msg.hci_status == HCI_SUCCESS) {
        bd_name_copy(search_data.disc_res.bd_name, remote_name_msg.bd_name);
      }
    // Both device and service search callbacks end up sending event to java.
    // It's enough to send callback to just one of them.
    if (bta_dm_search_cb.p_device_search_cback != nullptr) {
      bta_dm_search_cb.p_device_search_cback(BTA_DM_NAME_READ_EVT,
                                             &search_data);
    } else if (bta_dm_search_cb.service_search_cbacks.legacy != nullptr) {
      bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_NAME_READ_EVT,
                                                    &search_data);
    } else if (bta_dm_search_cb.service_search_cbacks.on_name_read != nullptr) {
      bta_dm_search_cb.service_search_cbacks.on_name_read(
          remote_name_msg.bd_addr, remote_name_msg.hci_status,
          remote_name_msg.bd_name);
    }
  } else {
    log::warn("Received remote name complete without callback");
+4 −0
Original line number Diff line number Diff line
@@ -312,10 +312,14 @@ typedef void(tBTA_DM_DID_RES_CBACK)(RawAddress bd_addr, uint8_t vendor_id_src,
                                    uint16_t vendor_id, uint16_t product_id,
                                    uint16_t version);

typedef void(tBTA_DM_NAME_READ_CBACK)(RawAddress bd_addr,
                                      tHCI_ERROR_CODE hci_status,
                                      const BD_NAME bd_name);
struct service_discovery_callbacks {
  /* legacy callback I'll tear apart and get rid of */
  tBTA_DM_SEARCH_CBACK* legacy;
  tBTA_DM_DID_RES_CBACK* on_did_received;
  tBTA_DM_NAME_READ_CBACK* on_name_read;
};

/* Execute call back */
+6 −3
Original line number Diff line number Diff line
@@ -238,21 +238,24 @@ TEST_F(BtaInitializedTest, bta_dm_disc_stop_device_discovery) {
TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_AUTO) {
  bta_dm_disc_start_service_discovery(
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr},
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr,
       nullptr},
      kRawAddress, BT_TRANSPORT_AUTO);
}

TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_BR_EDR) {
  bta_dm_disc_start_service_discovery(
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr},
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr,
       nullptr},
      kRawAddress, BT_TRANSPORT_BR_EDR);
}

TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_LE) {
  bta_dm_disc_start_service_discovery(
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr},
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr,
       nullptr},
      kRawAddress, BT_TRANSPORT_LE);
}

+44 −38
Original line number Diff line number Diff line
@@ -2081,46 +2081,45 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
          BT_STATUS_SUCCESS, bd_addr, num_properties, prop);
    } break;

    case BTA_DM_NAME_READ_EVT: {
    default: {
      ASSERTC(0, "unhandled search services event", event);
    } break;
  }
}

void btif_on_name_read(RawAddress bd_addr, tHCI_ERROR_CODE hci_status,
                       const BD_NAME bd_name) {
  if (IS_FLAG_ENABLED(rnr_present_during_service_discovery)) {
        const tBTA_DM_DISC_RES& disc_res = p_data->disc_res;
        if (disc_res.hci_status != HCI_SUCCESS) {
    if (hci_status != HCI_SUCCESS) {
      log::warn("Received RNR event with bad status addr:{} hci_status:{}",
                    ADDRESS_TO_LOGGABLE_CSTR(disc_res.bd_addr),
                    hci_error_code_text(disc_res.hci_status));
          break;
                ADDRESS_TO_LOGGABLE_CSTR(bd_addr),
                hci_error_code_text(hci_status));
      return;
    }
        if (disc_res.bd_name[0] == '\0') {
    if (bd_name[0] == '\0') {
      log::warn("Received RNR event without valid name addr:{}",
                    ADDRESS_TO_LOGGABLE_CSTR(disc_res.bd_addr));
          break;
                ADDRESS_TO_LOGGABLE_CSTR(bd_addr));
      return;
    }
    bt_property_t properties[] = {{
        .type = BT_PROPERTY_BDNAME,
            .len = (int)strnlen((char*)disc_res.bd_name, BD_NAME_LEN),
            .val = (void*)disc_res.bd_name,
        .len = (int)strnlen((char*)bd_name, BD_NAME_LEN),
        .val = (void*)bd_name,
    }};
        const bt_status_t status = btif_storage_set_remote_device_property(
            &disc_res.bd_addr, properties);
    const bt_status_t status =
        btif_storage_set_remote_device_property(&bd_addr, properties);
    ASSERT_LOG(status == BT_STATUS_SUCCESS,
               "Failed to save remote device property status:%s",
               bt_status_text(status).c_str());
    const size_t num_props = sizeof(properties) / sizeof(bt_property_t);
    GetInterfaceToProfiles()->events->invoke_remote_device_properties_cb(
            status, disc_res.bd_addr, (int)num_props, properties);
        log::info(
            "Callback for read name event addr:{} name:{}",
            ADDRESS_TO_LOGGABLE_CSTR(disc_res.bd_addr),
            PRIVATE_NAME(reinterpret_cast<char const*>(disc_res.bd_name)));
        status, bd_addr, (int)num_props, properties);
    log::info("Callback for read name event addr:{} name:{}",
              ADDRESS_TO_LOGGABLE_CSTR(bd_addr),
              PRIVATE_NAME(reinterpret_cast<char const*>(bd_name)));
  } else {
    log::info("Skipping name read event - called on bad callback.");
  }
    } break;

    default: {
      ASSERTC(0, "unhandled search services event", event);
    } break;
  }
}

void btif_on_did_received(RawAddress bd_addr, uint8_t vendor_id_src,
@@ -3143,8 +3142,11 @@ void btif_dm_get_remote_services(RawAddress remote_addr, const int transport) {
      base::StringPrintf("transport:%s", bt_transport_text(transport).c_str()));

  BTA_DmDiscover(remote_addr,
                 service_discovery_callbacks{btif_dm_search_services_evt,
                                             btif_on_did_received},
                 service_discovery_callbacks{
                     btif_dm_search_services_evt,
                     btif_on_did_received,
                     btif_on_name_read,
                 },
                 transport);
}

@@ -4281,6 +4283,10 @@ void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
  ::btif_dm_search_services_evt(event, p_data);
}

void btif_on_name_read(RawAddress bd_addr, tHCI_ERROR_CODE hci_status,
                       const BD_NAME bd_name) {
  ::btif_on_name_read(bd_addr, hci_status, bd_name);
}
}  // namespace testing
}  // namespace legacy
}  // namespace bluetooth
+6 −19
Original line number Diff line number Diff line
@@ -54,8 +54,8 @@ void bta_energy_info_cb(tBTM_BLE_TX_TIME_MS tx_time,
                        tBTM_BLE_ENERGY_USED energy_used,
                        tBTM_CONTRL_STATE ctrl_state, tBTA_STATUS status);

void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
                                 tBTA_DM_SEARCH* p_data);
void btif_on_name_read(RawAddress bd_addr, tHCI_ERROR_CODE hci_status,
                       const BD_NAME bd_name);

}  // namespace testing
}  // namespace legacy
@@ -174,24 +174,11 @@ TEST_F_WITH_FLAGS(BtifDmWithStackTest,
        };
      };

  tBTA_DM_SEARCH data = {
      .disc_res =
          {
              // tBTA_DM_DISC_RES
              .bd_addr = kRawAddress,
              .bd_name = {},
              .services = 0,
              .device_type = BT_DEVICE_TYPE_UNKNOWN,
              .num_uuids = 0,
              .p_uuid_list = nullptr,
              .result = BTA_SUCCESS,
              .hci_status = HCI_SUCCESS,
          },
  };
  bd_name_from_char_pointer(data.disc_res.bd_name, kBdName);
  BD_NAME bd_name;
  bd_name_from_char_pointer(bd_name, kBdName);

  bluetooth::legacy::testing::btif_dm_search_services_evt(BTA_DM_NAME_READ_EVT,
                                                          &data);
  bluetooth::legacy::testing::btif_on_name_read(kRawAddress, HCI_SUCCESS,
                                                bd_name);

  ASSERT_EQ(BT_STATUS_SUCCESS, invoke_remote_device_properties_cb.status);
  ASSERT_EQ(kRawAddress, invoke_remote_device_properties_cb.bd_addr);