Loading system/bta/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -1115,6 +1115,7 @@ cc_test { "libbase", "libcrypto", "liblog", "server_configurable_flags", ], static_libs: [ "libbluetooth-types", Loading @@ -1126,6 +1127,7 @@ cc_test { "libbt_shim_bridge", "libbt_shim_ffi", "libchrome", "libflagtest", "libflatbuffers-cpp", "libgmock", "libgtest", Loading system/bta/le_audio/broadcaster/broadcaster.cc +48 −8 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include <base/functional/bind.h> #include <bluetooth/log.h> #include <com_android_bluetooth_flags.h> #include <lc3.h> #include <mutex> Loading Loading @@ -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 { Loading Loading @@ -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( Loading @@ -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) { Loading system/bta/le_audio/broadcaster/mock_state_machine.h +1 −0 Original line number Diff line number Diff line Loading @@ -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_ = Loading system/bta/le_audio/broadcaster/state_machine.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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) Loading system/bta/le_audio/broadcaster/state_machine.h +2 −0 Original line number Diff line number Diff line Loading @@ -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_; }; Loading Loading @@ -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 Loading
system/bta/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -1115,6 +1115,7 @@ cc_test { "libbase", "libcrypto", "liblog", "server_configurable_flags", ], static_libs: [ "libbluetooth-types", Loading @@ -1126,6 +1127,7 @@ cc_test { "libbt_shim_bridge", "libbt_shim_ffi", "libchrome", "libflagtest", "libflatbuffers-cpp", "libgmock", "libgtest", Loading
system/bta/le_audio/broadcaster/broadcaster.cc +48 −8 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include <base/functional/bind.h> #include <bluetooth/log.h> #include <com_android_bluetooth_flags.h> #include <lc3.h> #include <mutex> Loading Loading @@ -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 { Loading Loading @@ -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( Loading @@ -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) { Loading
system/bta/le_audio/broadcaster/mock_state_machine.h +1 −0 Original line number Diff line number Diff line Loading @@ -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_ = Loading
system/bta/le_audio/broadcaster/state_machine.cc +11 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
system/bta/le_audio/broadcaster/state_machine.h +2 −0 Original line number Diff line number Diff line Loading @@ -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_; }; Loading Loading @@ -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