diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2024-04-11 09:36:25 -0400 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2024-04-11 11:59:30 -0400 |
commit | c7dcd064057fb89628c5da55da91dff363b559ca (patch) | |
tree | c4de9cefa68dec2a55c31d159b509f0542175025 | |
parent | be79cd19c5c5f6b42e40c0edb04d67ab21773f19 (diff) |
shared/bap: Make bt_bap_select fallback in case of no channel allocation
If channel allocation could not be matched attempt to call .select
without a channel allocation as the device might require a different
matching algorithm.
Fixes: https://github.com/bluez/bluez/issues/793
-rw-r--r-- | src/shared/bap.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/shared/bap.c b/src/shared/bap.c index b452461ac7..cc1fa1ffbe 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -5116,6 +5116,7 @@ int bt_bap_select(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac, void *user_data) { const struct queue_entry *lchan, *rchan; + int selected = 0; if (!lpac || !rpac || !func) return -EINVAL; @@ -5158,8 +5159,7 @@ int bt_bap_select(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac, rc->location, &rpac->qos, func, user_data, lpac->user_data); - if (count) - (*count)++; + selected++; /* Check if there are any channels left to select */ map.count &= ~(map.count & rc->count); @@ -5175,6 +5175,16 @@ int bt_bap_select(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac, } } + /* Fallback to no channel allocation since none could be matched. */ + if (!selected) { + lpac->ops->select(lpac, rpac, 0, &rpac->qos, func, user_data, + lpac->user_data); + selected++; + } + + if (count) + *count += selected; + return 0; } |