Loading system/bta/le_audio/devices.cc +29 −13 Original line number Diff line number Diff line Loading @@ -1521,7 +1521,16 @@ bool LeAudioDevice::ConfigureAses( ase->retrans_nb = ent.qos.retransmission_number; ase->max_transport_latency = ent.qos.max_transport_latency; ase->metadata = GetMetadata(metadata_context_type, ccid_list); /* Filter multidirectional audio context for each ase direction */ auto directional_audio_context = metadata_context_type & GetAvailableContexts(ase->direction); if (directional_audio_context.any()) { ase->metadata = GetMetadata(directional_audio_context, ccid_list); } else { ase->metadata = GetMetadata(AudioContexts(LeAudioContextType::UNSPECIFIED), std::vector<uint8_t>()); } DLOG(INFO) << __func__ << " device=" << address_ << ", activated ASE id=" << +ase->id Loading Loading @@ -2403,8 +2412,8 @@ uint8_t LeAudioDevice::GetPhyBitmask(void) { void LeAudioDevice::SetSupportedContexts(AudioContexts snk_contexts, AudioContexts src_contexts) { supp_snk_context_ = snk_contexts; supp_src_context_ = src_contexts; supp_contexts_.sink = snk_contexts; supp_contexts_.source = src_contexts; } void LeAudioDevice::Dump(int fd) { Loading Loading @@ -2446,8 +2455,14 @@ void LeAudioDevice::DisconnectAcl(void) { } } AudioContexts LeAudioDevice::GetAvailableContexts(void) { return avail_snk_contexts_ | avail_src_contexts_; types::AudioContexts LeAudioDevice::GetAvailableContexts(int direction) { if (direction == (types::kLeAudioDirectionSink | types::kLeAudioDirectionSource)) { return get_bidirectional(avail_contexts_); } else if (direction == types::kLeAudioDirectionSink) { return avail_contexts_.sink; } return avail_contexts_.source; } /* Returns XOR of updated sink and source bitset context types */ Loading @@ -2455,18 +2470,19 @@ AudioContexts LeAudioDevice::SetAvailableContexts(AudioContexts snk_contexts, AudioContexts src_contexts) { AudioContexts updated_contexts; updated_contexts = snk_contexts ^ avail_snk_contexts_; updated_contexts |= src_contexts ^ avail_src_contexts_; updated_contexts = snk_contexts ^ avail_contexts_.sink; updated_contexts |= src_contexts ^ avail_contexts_.source; LOG_DEBUG( "\n\t avail_snk_contexts_: %s \n\t avail_src_contexts_: %s \n\t " "\n\t avail_contexts_.sink: %s \n\t avail_contexts_.source: %s \n\t " "snk_contexts: %s \n\t src_contexts: %s \n\t updated_contexts: %s", avail_snk_contexts_.to_string().c_str(), avail_src_contexts_.to_string().c_str(), snk_contexts.to_string().c_str(), src_contexts.to_string().c_str(), updated_contexts.to_string().c_str()); avail_contexts_.sink.to_string().c_str(), avail_contexts_.source.to_string().c_str(), snk_contexts.to_string().c_str(), src_contexts.to_string().c_str(), updated_contexts.to_string().c_str()); avail_snk_contexts_ = snk_contexts; avail_src_contexts_ = src_contexts; avail_contexts_.sink = snk_contexts; avail_contexts_.source = src_contexts; return updated_contexts; } Loading system/bta/le_audio/devices.h +5 −5 Original line number Diff line number Diff line Loading @@ -168,7 +168,9 @@ class LeAudioDevice { const std::vector<uint8_t>& ccid_list); void SetSupportedContexts(types::AudioContexts snk_contexts, types::AudioContexts src_contexts); types::AudioContexts GetAvailableContexts(void); types::AudioContexts GetAvailableContexts( int direction = (types::kLeAudioDirectionSink | types::kLeAudioDirectionSource)); types::AudioContexts SetAvailableContexts(types::AudioContexts snk_cont_val, types::AudioContexts src_cont_val); void DeactivateAllAses(void); Loading @@ -181,10 +183,8 @@ class LeAudioDevice { const std::vector<uint8_t>& ccid_list); private: types::AudioContexts avail_snk_contexts_; types::AudioContexts avail_src_contexts_; types::AudioContexts supp_snk_context_; types::AudioContexts supp_src_context_; types::BidirectionalPair<types::AudioContexts> avail_contexts_; types::BidirectionalPair<types::AudioContexts> supp_contexts_; }; /* LeAudioDevices class represents a wraper helper over all devices in le audio Loading system/bta/le_audio/le_audio_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -410,6 +410,7 @@ class AudioContexts { bool operator==(const AudioContexts& other) const { return value() == other.value(); }; constexpr AudioContexts operator~() const { return AudioContexts(~value()); } }; AudioContexts operator|(std::underlying_type<LeAudioContextType>::type lhs, Loading @@ -425,6 +426,10 @@ constexpr AudioContexts operator|(const AudioContexts& lhs, const AudioContexts& rhs) { return AudioContexts(lhs.value() | rhs.value()); } constexpr AudioContexts operator&(const AudioContexts& lhs, const AudioContexts& rhs) { return AudioContexts(lhs.value() & rhs.value()); } constexpr AudioContexts operator|(const LeAudioContextType& lhs, const LeAudioContextType& rhs) { using T = std::underlying_type<LeAudioContextType>::type; Loading system/bta/le_audio/state_machine.cc +14 −3 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ using le_audio::types::AudioContexts; using le_audio::types::AudioStreamDataPathState; using le_audio::types::CigState; using le_audio::types::CodecLocation; using le_audio::types::LeAudioContextType; namespace { Loading Loading @@ -2024,8 +2025,6 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine { leAudioDevice = group->GetNextActiveDevice(leAudioDevice)) { if (!leAudioDevice->IsMetadataChanged(context_type, ccid_list)) continue; auto new_metadata = leAudioDevice->GetMetadata(context_type, ccid_list); /* Request server to update ASEs with new metadata */ for (struct ase* ase = leAudioDevice->GetFirstActiveAse(); ase != nullptr; ase = leAudioDevice->GetNextActiveAse(ase)) { Loading @@ -2033,10 +2032,22 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine { leAudioDevice->address_.ToString().c_str(), ase->id, ase->cis_id, ToString(ase->state).c_str()); /* Filter multidirectional audio context for each ase direction */ auto directional_audio_context = context_type & leAudioDevice->GetAvailableContexts(ase->direction); if (directional_audio_context.any()) { ase->metadata = leAudioDevice->GetMetadata(directional_audio_context, ccid_list); } else { ase->metadata = leAudioDevice->GetMetadata( AudioContexts(LeAudioContextType::UNSPECIFIED), std::vector<uint8_t>()); } struct le_audio::client_parser::ascs::ctp_update_metadata conf; conf.ase_id = ase->id; conf.metadata = new_metadata; conf.metadata = ase->metadata; confs.push_back(conf); } Loading Loading
system/bta/le_audio/devices.cc +29 −13 Original line number Diff line number Diff line Loading @@ -1521,7 +1521,16 @@ bool LeAudioDevice::ConfigureAses( ase->retrans_nb = ent.qos.retransmission_number; ase->max_transport_latency = ent.qos.max_transport_latency; ase->metadata = GetMetadata(metadata_context_type, ccid_list); /* Filter multidirectional audio context for each ase direction */ auto directional_audio_context = metadata_context_type & GetAvailableContexts(ase->direction); if (directional_audio_context.any()) { ase->metadata = GetMetadata(directional_audio_context, ccid_list); } else { ase->metadata = GetMetadata(AudioContexts(LeAudioContextType::UNSPECIFIED), std::vector<uint8_t>()); } DLOG(INFO) << __func__ << " device=" << address_ << ", activated ASE id=" << +ase->id Loading Loading @@ -2403,8 +2412,8 @@ uint8_t LeAudioDevice::GetPhyBitmask(void) { void LeAudioDevice::SetSupportedContexts(AudioContexts snk_contexts, AudioContexts src_contexts) { supp_snk_context_ = snk_contexts; supp_src_context_ = src_contexts; supp_contexts_.sink = snk_contexts; supp_contexts_.source = src_contexts; } void LeAudioDevice::Dump(int fd) { Loading Loading @@ -2446,8 +2455,14 @@ void LeAudioDevice::DisconnectAcl(void) { } } AudioContexts LeAudioDevice::GetAvailableContexts(void) { return avail_snk_contexts_ | avail_src_contexts_; types::AudioContexts LeAudioDevice::GetAvailableContexts(int direction) { if (direction == (types::kLeAudioDirectionSink | types::kLeAudioDirectionSource)) { return get_bidirectional(avail_contexts_); } else if (direction == types::kLeAudioDirectionSink) { return avail_contexts_.sink; } return avail_contexts_.source; } /* Returns XOR of updated sink and source bitset context types */ Loading @@ -2455,18 +2470,19 @@ AudioContexts LeAudioDevice::SetAvailableContexts(AudioContexts snk_contexts, AudioContexts src_contexts) { AudioContexts updated_contexts; updated_contexts = snk_contexts ^ avail_snk_contexts_; updated_contexts |= src_contexts ^ avail_src_contexts_; updated_contexts = snk_contexts ^ avail_contexts_.sink; updated_contexts |= src_contexts ^ avail_contexts_.source; LOG_DEBUG( "\n\t avail_snk_contexts_: %s \n\t avail_src_contexts_: %s \n\t " "\n\t avail_contexts_.sink: %s \n\t avail_contexts_.source: %s \n\t " "snk_contexts: %s \n\t src_contexts: %s \n\t updated_contexts: %s", avail_snk_contexts_.to_string().c_str(), avail_src_contexts_.to_string().c_str(), snk_contexts.to_string().c_str(), src_contexts.to_string().c_str(), updated_contexts.to_string().c_str()); avail_contexts_.sink.to_string().c_str(), avail_contexts_.source.to_string().c_str(), snk_contexts.to_string().c_str(), src_contexts.to_string().c_str(), updated_contexts.to_string().c_str()); avail_snk_contexts_ = snk_contexts; avail_src_contexts_ = src_contexts; avail_contexts_.sink = snk_contexts; avail_contexts_.source = src_contexts; return updated_contexts; } Loading
system/bta/le_audio/devices.h +5 −5 Original line number Diff line number Diff line Loading @@ -168,7 +168,9 @@ class LeAudioDevice { const std::vector<uint8_t>& ccid_list); void SetSupportedContexts(types::AudioContexts snk_contexts, types::AudioContexts src_contexts); types::AudioContexts GetAvailableContexts(void); types::AudioContexts GetAvailableContexts( int direction = (types::kLeAudioDirectionSink | types::kLeAudioDirectionSource)); types::AudioContexts SetAvailableContexts(types::AudioContexts snk_cont_val, types::AudioContexts src_cont_val); void DeactivateAllAses(void); Loading @@ -181,10 +183,8 @@ class LeAudioDevice { const std::vector<uint8_t>& ccid_list); private: types::AudioContexts avail_snk_contexts_; types::AudioContexts avail_src_contexts_; types::AudioContexts supp_snk_context_; types::AudioContexts supp_src_context_; types::BidirectionalPair<types::AudioContexts> avail_contexts_; types::BidirectionalPair<types::AudioContexts> supp_contexts_; }; /* LeAudioDevices class represents a wraper helper over all devices in le audio Loading
system/bta/le_audio/le_audio_types.h +5 −0 Original line number Diff line number Diff line Loading @@ -410,6 +410,7 @@ class AudioContexts { bool operator==(const AudioContexts& other) const { return value() == other.value(); }; constexpr AudioContexts operator~() const { return AudioContexts(~value()); } }; AudioContexts operator|(std::underlying_type<LeAudioContextType>::type lhs, Loading @@ -425,6 +426,10 @@ constexpr AudioContexts operator|(const AudioContexts& lhs, const AudioContexts& rhs) { return AudioContexts(lhs.value() | rhs.value()); } constexpr AudioContexts operator&(const AudioContexts& lhs, const AudioContexts& rhs) { return AudioContexts(lhs.value() & rhs.value()); } constexpr AudioContexts operator|(const LeAudioContextType& lhs, const LeAudioContextType& rhs) { using T = std::underlying_type<LeAudioContextType>::type; Loading
system/bta/le_audio/state_machine.cc +14 −3 Original line number Diff line number Diff line Loading @@ -103,6 +103,7 @@ using le_audio::types::AudioContexts; using le_audio::types::AudioStreamDataPathState; using le_audio::types::CigState; using le_audio::types::CodecLocation; using le_audio::types::LeAudioContextType; namespace { Loading Loading @@ -2024,8 +2025,6 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine { leAudioDevice = group->GetNextActiveDevice(leAudioDevice)) { if (!leAudioDevice->IsMetadataChanged(context_type, ccid_list)) continue; auto new_metadata = leAudioDevice->GetMetadata(context_type, ccid_list); /* Request server to update ASEs with new metadata */ for (struct ase* ase = leAudioDevice->GetFirstActiveAse(); ase != nullptr; ase = leAudioDevice->GetNextActiveAse(ase)) { Loading @@ -2033,10 +2032,22 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine { leAudioDevice->address_.ToString().c_str(), ase->id, ase->cis_id, ToString(ase->state).c_str()); /* Filter multidirectional audio context for each ase direction */ auto directional_audio_context = context_type & leAudioDevice->GetAvailableContexts(ase->direction); if (directional_audio_context.any()) { ase->metadata = leAudioDevice->GetMetadata(directional_audio_context, ccid_list); } else { ase->metadata = leAudioDevice->GetMetadata( AudioContexts(LeAudioContextType::UNSPECIFIED), std::vector<uint8_t>()); } struct le_audio::client_parser::ascs::ctp_update_metadata conf; conf.ase_id = ase->id; conf.metadata = new_metadata; conf.metadata = ase->metadata; confs.push_back(conf); } Loading