Loading system/bta/le_audio/devices.cc +18 −1 Original line number Diff line number Diff line Loading @@ -894,6 +894,15 @@ types::LeAudioConfigurationStrategy LeAudioDeviceGroup::GetGroupStrategy(void) { return types::LeAudioConfigurationStrategy::STEREO_ONE_CIS_PER_DEVICE; } int LeAudioDeviceGroup::GetAseCount(uint8_t direction) { int result = 0; for (const auto& device_iter : leAudioDevices_) { result += device_iter.lock()->GetAseCount(direction); } return result; } void LeAudioDeviceGroup::CigGenerateCisIds( types::LeAudioContextType context_type) { LOG_INFO("Group %p, group_id: %d, context_type: %s", this, group_id_, Loading @@ -910,7 +919,9 @@ void LeAudioDeviceGroup::CigGenerateCisIds( uint8_t cis_count_bidir = 0; uint8_t cis_count_unidir_sink = 0; uint8_t cis_count_unidir_source = 0; get_cis_count(confs, GetGroupStrategy(), &cis_count_bidir, get_cis_count(confs, GetGroupStrategy(), GetAseCount(types::kLeAudioDirectionSink), GetAseCount(types::kLeAudioDirectionSource), &cis_count_bidir, &cis_count_unidir_sink, &cis_count_unidir_source); uint8_t idx = 0; Loading Loading @@ -1928,6 +1939,12 @@ struct ase* LeAudioDevice::GetAseByValHandle(uint16_t val_hdl) { return (iter == ases_.end()) ? nullptr : &(*iter); } int LeAudioDevice::GetAseCount(uint8_t direction) { return std::count_if(ases_.begin(), ases_.end(), [direction](const auto& a) { return a.direction == direction; }); } struct ase* LeAudioDevice::GetFirstInactiveAseWithState(uint8_t direction, AseState state) { auto iter = std::find_if( Loading system/bta/le_audio/devices.h +2 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ class LeAudioDevice { void RegisterPACs(std::vector<struct types::acs_ac_record>* apr_db, std::vector<struct types::acs_ac_record>* apr); struct types::ase* GetAseByValHandle(uint16_t val_hdl); int GetAseCount(uint8_t direction); struct types::ase* GetFirstActiveAse(void); struct types::ase* GetFirstActiveAseByDirection(uint8_t direction); struct types::ase* GetNextActiveAseWithSameDirection( Loading Loading @@ -233,6 +234,7 @@ class LeAudioDeviceGroup { LeAudioDevice* GetFirstDeviceWithActiveContext( types::LeAudioContextType context_type); le_audio::types::LeAudioConfigurationStrategy GetGroupStrategy(void); int GetAseCount(uint8_t direction); LeAudioDevice* GetNextDevice(LeAudioDevice* leAudioDevice); LeAudioDevice* GetNextDeviceWithActiveContext( LeAudioDevice* leAudioDevice, types::LeAudioContextType context_type); Loading system/bta/le_audio/le_audio_types.cc +42 −2 Original line number Diff line number Diff line Loading @@ -71,8 +71,12 @@ static uint8_t min_req_devices_cnt( void get_cis_count(const AudioSetConfigurations* audio_set_confs, types::LeAudioConfigurationStrategy strategy, int group_ase_snk_cnt, int group_ase_src_count, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source) { LOG_INFO(" strategy %d, sink ases: %d, source ases %d", static_cast<int>(strategy), group_ase_snk_cnt, group_ase_src_count); for (auto audio_set_conf : *audio_set_confs) { std::pair<uint8_t /* sink */, uint8_t /* source */> snk_src_pair(0, 0); uint8_t bidir_count = 0; Loading @@ -83,7 +87,7 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, bool stategy_mismatch = false; for (auto ent : (*audio_set_conf).confs) { if (ent.strategy != strategy) { LOG_INFO("Strategy does not match (%d != %d)- skip this configuration", LOG_DEBUG("Strategy does not match (%d != %d)- skip this configuration", static_cast<int>(ent.strategy), static_cast<int>(strategy)); stategy_mismatch = true; break; Loading @@ -100,6 +104,42 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, continue; } /* Before we start adding another CISes, ignore scenarios which cannot * satisfied because of the number of ases */ if (group_ase_snk_cnt == 0 && snk_src_pair.first > 0) { LOG_DEBUG("Group does not have sink ASEs"); continue; } if (group_ase_src_count == 0 && snk_src_pair.second > 0) { LOG_DEBUG("Group does not have source ASEs"); continue; } /* Configuration list is set in the prioritized order. * it might happen that more prio configuration can be supported * and is already taken into account. * Now let's try to ignore ortogonal configuration which would just * increase our demant on number of CISes but will never happen */ if (snk_src_pair.first == 0 && (*cis_count_unidir_sink > 0 || *cis_count_bidir > 0)) { LOG_DEBUG( "More prio configuration using sink ASEs has been taken into " "account"); continue; } if (snk_src_pair.second == 0 && (*cis_count_unidir_source > 0 || *cis_count_bidir > 0)) { LOG_DEBUG( "More prio configuration using source ASEs has been taken into " "account"); continue; } bidir_count = std::min(snk_src_pair.first, snk_src_pair.second); unidir_sink_count = ((snk_src_pair.first - bidir_count) > 0) ? (snk_src_pair.first - bidir_count) Loading system/bta/le_audio/le_audio_types.h +1 −0 Original line number Diff line number Diff line Loading @@ -668,6 +668,7 @@ static constexpr uint32_t kChannelAllocationStereo = /* Declarations */ void get_cis_count(const AudioSetConfigurations* audio_set_configurations, types::LeAudioConfigurationStrategy strategy, int group_ase_snk_cnt, int group_ase_src_count, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source); bool check_if_may_cover_scenario( Loading Loading
system/bta/le_audio/devices.cc +18 −1 Original line number Diff line number Diff line Loading @@ -894,6 +894,15 @@ types::LeAudioConfigurationStrategy LeAudioDeviceGroup::GetGroupStrategy(void) { return types::LeAudioConfigurationStrategy::STEREO_ONE_CIS_PER_DEVICE; } int LeAudioDeviceGroup::GetAseCount(uint8_t direction) { int result = 0; for (const auto& device_iter : leAudioDevices_) { result += device_iter.lock()->GetAseCount(direction); } return result; } void LeAudioDeviceGroup::CigGenerateCisIds( types::LeAudioContextType context_type) { LOG_INFO("Group %p, group_id: %d, context_type: %s", this, group_id_, Loading @@ -910,7 +919,9 @@ void LeAudioDeviceGroup::CigGenerateCisIds( uint8_t cis_count_bidir = 0; uint8_t cis_count_unidir_sink = 0; uint8_t cis_count_unidir_source = 0; get_cis_count(confs, GetGroupStrategy(), &cis_count_bidir, get_cis_count(confs, GetGroupStrategy(), GetAseCount(types::kLeAudioDirectionSink), GetAseCount(types::kLeAudioDirectionSource), &cis_count_bidir, &cis_count_unidir_sink, &cis_count_unidir_source); uint8_t idx = 0; Loading Loading @@ -1928,6 +1939,12 @@ struct ase* LeAudioDevice::GetAseByValHandle(uint16_t val_hdl) { return (iter == ases_.end()) ? nullptr : &(*iter); } int LeAudioDevice::GetAseCount(uint8_t direction) { return std::count_if(ases_.begin(), ases_.end(), [direction](const auto& a) { return a.direction == direction; }); } struct ase* LeAudioDevice::GetFirstInactiveAseWithState(uint8_t direction, AseState state) { auto iter = std::find_if( Loading
system/bta/le_audio/devices.h +2 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ class LeAudioDevice { void RegisterPACs(std::vector<struct types::acs_ac_record>* apr_db, std::vector<struct types::acs_ac_record>* apr); struct types::ase* GetAseByValHandle(uint16_t val_hdl); int GetAseCount(uint8_t direction); struct types::ase* GetFirstActiveAse(void); struct types::ase* GetFirstActiveAseByDirection(uint8_t direction); struct types::ase* GetNextActiveAseWithSameDirection( Loading Loading @@ -233,6 +234,7 @@ class LeAudioDeviceGroup { LeAudioDevice* GetFirstDeviceWithActiveContext( types::LeAudioContextType context_type); le_audio::types::LeAudioConfigurationStrategy GetGroupStrategy(void); int GetAseCount(uint8_t direction); LeAudioDevice* GetNextDevice(LeAudioDevice* leAudioDevice); LeAudioDevice* GetNextDeviceWithActiveContext( LeAudioDevice* leAudioDevice, types::LeAudioContextType context_type); Loading
system/bta/le_audio/le_audio_types.cc +42 −2 Original line number Diff line number Diff line Loading @@ -71,8 +71,12 @@ static uint8_t min_req_devices_cnt( void get_cis_count(const AudioSetConfigurations* audio_set_confs, types::LeAudioConfigurationStrategy strategy, int group_ase_snk_cnt, int group_ase_src_count, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source) { LOG_INFO(" strategy %d, sink ases: %d, source ases %d", static_cast<int>(strategy), group_ase_snk_cnt, group_ase_src_count); for (auto audio_set_conf : *audio_set_confs) { std::pair<uint8_t /* sink */, uint8_t /* source */> snk_src_pair(0, 0); uint8_t bidir_count = 0; Loading @@ -83,7 +87,7 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, bool stategy_mismatch = false; for (auto ent : (*audio_set_conf).confs) { if (ent.strategy != strategy) { LOG_INFO("Strategy does not match (%d != %d)- skip this configuration", LOG_DEBUG("Strategy does not match (%d != %d)- skip this configuration", static_cast<int>(ent.strategy), static_cast<int>(strategy)); stategy_mismatch = true; break; Loading @@ -100,6 +104,42 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, continue; } /* Before we start adding another CISes, ignore scenarios which cannot * satisfied because of the number of ases */ if (group_ase_snk_cnt == 0 && snk_src_pair.first > 0) { LOG_DEBUG("Group does not have sink ASEs"); continue; } if (group_ase_src_count == 0 && snk_src_pair.second > 0) { LOG_DEBUG("Group does not have source ASEs"); continue; } /* Configuration list is set in the prioritized order. * it might happen that more prio configuration can be supported * and is already taken into account. * Now let's try to ignore ortogonal configuration which would just * increase our demant on number of CISes but will never happen */ if (snk_src_pair.first == 0 && (*cis_count_unidir_sink > 0 || *cis_count_bidir > 0)) { LOG_DEBUG( "More prio configuration using sink ASEs has been taken into " "account"); continue; } if (snk_src_pair.second == 0 && (*cis_count_unidir_source > 0 || *cis_count_bidir > 0)) { LOG_DEBUG( "More prio configuration using source ASEs has been taken into " "account"); continue; } bidir_count = std::min(snk_src_pair.first, snk_src_pair.second); unidir_sink_count = ((snk_src_pair.first - bidir_count) > 0) ? (snk_src_pair.first - bidir_count) Loading
system/bta/le_audio/le_audio_types.h +1 −0 Original line number Diff line number Diff line Loading @@ -668,6 +668,7 @@ static constexpr uint32_t kChannelAllocationStereo = /* Declarations */ void get_cis_count(const AudioSetConfigurations* audio_set_configurations, types::LeAudioConfigurationStrategy strategy, int group_ase_snk_cnt, int group_ase_src_count, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source); bool check_if_may_cover_scenario( Loading