2024-04-11 20:03:21

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v4 3/4] shared/bap: Fix not resuming reading attributes

From: Luiz Augusto von Dentz <[email protected]>

If there is an unexpected disconnect and some attributes values
where left uninitialized this attempts to resume reading them once a
new session is attached.
---
src/shared/bap.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)

diff --git a/src/shared/bap.c b/src/shared/bap.c
index cc1fa1ffbe32..5fee7b4c54ca 100644
--- a/src/shared/bap.c
+++ b/src/shared/bap.c
@@ -4703,6 +4703,18 @@ clone:
}
}

+ /* Resume reading sink locations if supported */
+ if (pacs->sink && pacs->sink_loc && !pacs->sink_loc_value) {
+ if (gatt_db_attribute_get_char_data(pacs->sink_loc,
+ NULL, &value_handle,
+ NULL, NULL, NULL)) {
+ bt_gatt_client_read_value(bap->client,
+ value_handle,
+ read_sink_pac_loc,
+ bap, NULL);
+ }
+ }
+
/* Resume reading sources if supported */
if (pacs->source && queue_isempty(bap->rdb->sources)) {
if (gatt_db_attribute_get_char_data(pacs->source,
@@ -4715,6 +4727,48 @@ clone:
}
}

+ /* Resume reading source locations if supported */
+ if (pacs->source && pacs->source_loc &&
+ !pacs->source_loc_value) {
+ if (gatt_db_attribute_get_char_data(pacs->source_loc,
+ NULL, &value_handle,
+ NULL, NULL, NULL)) {
+ bt_gatt_client_read_value(bap->client,
+ value_handle,
+ read_source_pac_loc,
+ bap, NULL);
+ }
+ }
+
+ /* Resume reading supported contexts if supported */
+ if (pacs->sink && pacs->supported_context &&
+ !pacs->supported_sink_context_value &&
+ !pacs->supported_source_context_value) {
+ if (gatt_db_attribute_get_char_data(
+ pacs->supported_context,
+ NULL, &value_handle,
+ NULL, NULL, NULL)) {
+ bt_gatt_client_read_value(bap->client,
+ value_handle,
+ read_pac_supported_context,
+ bap, NULL);
+ }
+ }
+
+ /* Resume reading contexts if supported */
+ if (pacs->sink && pacs->context &&
+ !pacs->sink_context_value &&
+ !pacs->source_context_value) {
+ if (gatt_db_attribute_get_char_data(pacs->context,
+ NULL, &value_handle,
+ NULL, NULL, NULL)) {
+ bt_gatt_client_read_value(bap->client,
+ value_handle,
+ read_pac_context,
+ bap, NULL);
+ }
+ }
+
queue_foreach(bap->remote_eps, bap_endpoint_foreach, bap);

bap_cp_attach(bap);
--
2.44.0