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

Commit fd8a6c58 authored by Rongxuan Liu's avatar Rongxuan Liu Committed by Automerger Merge Worker
Browse files

Merge "[le audio] Updating broadcast metadata triggers callback" into main am:...

Merge "[le audio] Updating broadcast metadata triggers callback" into main am: 339e0ef5 am: 6b23faa6

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/3135795



Change-Id: I4358bf220d890f63f77d7b5ac8e89370844b4334
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents f290b34a 6b23faa6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1115,6 +1115,7 @@ cc_test {
        "libbase",
        "libcrypto",
        "liblog",
        "server_configurable_flags",
    ],
    static_libs: [
        "libbluetooth-types",
@@ -1126,6 +1127,7 @@ cc_test {
        "libbt_shim_bridge",
        "libbt_shim_ffi",
        "libchrome",
        "libflagtest",
        "libflatbuffers-cpp",
        "libgmock",
        "libgtest",
+48 −8
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

#include <base/functional/bind.h>
#include <bluetooth/log.h>
#include <com_android_bluetooth_flags.h>
#include <lc3.h>

#include <mutex>
@@ -1027,6 +1028,10 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
              instance->le_audio_source_hal_client_.get(),
              std::placeholders::_1));
    }

    void OnAnnouncementUpdated(uint32_t broadcast_id) {
      instance->GetBroadcastMetadata(broadcast_id);
    }
  } state_machine_callbacks_;

  static class BroadcastAdvertisingCallbacks : public AdvertisingCallbacks {
@@ -1064,11 +1069,28 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
    }

    void OnAdvertisingDataSet(uint8_t advertiser_id, uint8_t status) {
      if (com::android::bluetooth::flags::
              leaudio_broadcast_update_metadata_callback()) {
        if (!instance) return;

        auto const& iter = std::find_if(
            instance->broadcasts_.cbegin(), instance->broadcasts_.cend(),
            [advertiser_id](auto const& sm) {
              return sm.second->GetAdvertisingSid() == advertiser_id;
            });
        if (iter != instance->broadcasts_.cend()) {
          iter->second->OnUpdateAnnouncement(status);
        } else {
          log::warn("Ignored OnAdvertisingDataSet callback advertiser_id:{}",
                    advertiser_id);
        }
      } else {
        log::warn(
            "Not being used, ignored OnAdvertisingDataSet callback "
            "advertiser_id:{}",
            advertiser_id);
      }
    }

    void OnScanResponseDataSet(uint8_t advertiser_id, uint8_t status) {
      log::warn(
@@ -1094,11 +1116,29 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
    }

    void OnPeriodicAdvertisingDataSet(uint8_t advertiser_id, uint8_t status) {
      if (com::android::bluetooth::flags::
              leaudio_broadcast_update_metadata_callback()) {
        if (!instance) return;

        auto const& iter = std::find_if(
            instance->broadcasts_.cbegin(), instance->broadcasts_.cend(),
            [advertiser_id](auto const& sm) {
              return sm.second->GetAdvertisingSid() == advertiser_id;
            });
        if (iter != instance->broadcasts_.cend()) {
          iter->second->OnUpdateAnnouncement(status);
        } else {
          log::warn(
              "Ignored OnPeriodicAdvertisingDataSet callback advertiser_id:{}",
              advertiser_id);
        }
      } else {
        log::warn(
            "Not being used, ignored OnPeriodicAdvertisingDataSet callback "
            "advertiser_id:{}",
            advertiser_id);
      }
    }

    void OnPeriodicAdvertisingEnabled(uint8_t advertiser_id, bool enable,
                                      uint8_t status) {
+1 −0
Original line number Diff line number Diff line
@@ -169,6 +169,7 @@ class MockBroadcastStateMachine
              (override));
  MOCK_METHOD((void), OnEnableAnnouncement, (bool enable, uint8_t status),
              (override));
  MOCK_METHOD((void), OnUpdateAnnouncement, (uint8_t status), (override));

  bool result_ = true;
  std::optional<bluetooth::le_audio::broadcaster::BigConfig> big_config_ =
+11 −0
Original line number Diff line number Diff line
@@ -196,6 +196,17 @@ class BroadcastStateMachineImpl : public BroadcastStateMachine {
    }
  }

  void OnUpdateAnnouncement(uint8_t status) {
    log::info("broadcast_id={}, status={}", GetBroadcastId(), status);

    if (status ==
        bluetooth::hci::AdvertisingCallback::AdvertisingStatus::SUCCESS) {
      callbacks_->OnAnnouncementUpdated(GetBroadcastId());
    } else {
      log::error("Updating Announcement failed");
    }
  }

  void UpdatePublicBroadcastAnnouncement(
      uint32_t broadcast_id, const std::string& broadcast_name,
      const bluetooth::le_audio::PublicBroadcastAnnouncementData& announcement)
+2 −0
Original line number Diff line number Diff line
@@ -180,6 +180,7 @@ class BroadcastStateMachine : public StateMachine<5> {
  virtual void OnCreateAnnouncement(uint8_t advertising_sid, int8_t tx_power,
                                    uint8_t status) = 0;
  virtual void OnEnableAnnouncement(bool enable, uint8_t status) = 0;
  virtual void OnUpdateAnnouncement(uint8_t status) = 0;
  void SetMuted(bool muted) { is_muted_ = muted; };
  bool IsMuted() const { return is_muted_; };

@@ -218,6 +219,7 @@ class IBroadcastStateMachineCallbacks {
  virtual void OnOwnAddressResponse(uint32_t broadcast_id, uint8_t addr_type,
                                    RawAddress address) = 0;
  virtual void OnBigCreated(const std::vector<uint16_t>& conn_handle) = 0;
  virtual void OnAnnouncementUpdated(uint32_t broadcast_id) = 0;
};

std::ostream& operator<<(
Loading