This is an automated email from the ASF dual-hosted git repository.
janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 1fa9dfd3c nimble/audio: Add subgroups information for modify operation
1fa9dfd3c is described below
commit 1fa9dfd3c02602748b3b0e7edf05aeec2f24a92b
Author: Szymon Czapracki <[email protected]>
AuthorDate: Mon Sep 23 14:29:45 2024 +0200
nimble/audio: Add subgroups information for modify operation
This commit adds subgroups info for modify source operation.
Now metadata field can be handled in scan delegator during
modify procedure.
---
.../include/services/bass/ble_audio_svc_bass.h | 2 -
.../audio/services/bass/src/ble_audio_svc_bass.c | 49 +++++++++++-----------
nimble/host/audio/src/ble_audio_scan_delegator.c | 5 ++-
3 files changed, 27 insertions(+), 29 deletions(-)
diff --git
a/nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h
b/nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h
index 48f1a5323..873ac7ae6 100644
--- a/nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h
+++ b/nimble/host/audio/services/bass/include/services/bass/ble_audio_svc_bass.h
@@ -327,8 +327,6 @@ struct ble_svc_audio_bass_operation {
/** Number of subgroups */
uint16_t num_subgroups;
- /** BIS Synchronisation of subgroups */
- uint32_t bis_sync[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
/** Subgroup entries */
struct ble_svc_audio_bass_subgroup
subgroups[BLE_SVC_AUDIO_BASS_SUB_NUM_MAX];
diff --git a/nimble/host/audio/services/bass/src/ble_audio_svc_bass.c
b/nimble/host/audio/services/bass/src/ble_audio_svc_bass.c
index cc4805f95..e3cecb060 100644
--- a/nimble/host/audio/services/bass/src/ble_audio_svc_bass.c
+++ b/nimble/host/audio/services/bass/src/ble_audio_svc_bass.c
@@ -282,28 +282,6 @@ ble_svc_audio_bass_remote_scan_started(uint8_t *data,
uint16_t data_len, uint16_
return 0;
}
-static int
-check_bis_sync(uint16_t num_subgroups, const uint32_t *bis_sync_list)
-{
- uint32_t bis_sync_mask = 0;
- int i;
- int j;
-
- for (i = 0; i < num_subgroups; i++) {
- if (bis_sync_list[i] != 0xFFFFFFFF) {
- for (j = 0; j < num_subgroups; j++) {
- if (bis_sync_list[i] & bis_sync_mask) {
- return BLE_HS_EINVAL;
- }
-
- bis_sync_mask |= bis_sync_list[i];
- }
- }
- }
-
- return 0;
-}
-
static int
ble_svc_audio_bass_add_source(uint8_t *data, uint16_t data_len, uint16_t
conn_handle)
{
@@ -382,7 +360,7 @@ ble_svc_audio_bass_add_source(uint8_t *data, uint16_t
data_len, uint16_t conn_ha
data_len -= operation.add_source.subgroups[i].metadata_length;
if (check_bis_sync(operation.add_source.num_subgroups,
- operation.add_source.bis_sync)) {
+ operation.add_source.subgroups)) {
rc = BLE_HS_EINVAL;
ev.bass_operation_status.status = BLE_HS_EREJECT;
goto done;
@@ -466,6 +444,27 @@ done:
}
static int
+check_bis_sync(uint16_t num_subgroups, struct ble_svc_audio_bass_subgroup
*subgroups)
+{
+ uint32_t bis_sync_mask = 0;
+ int i;
+ int j;
+
+ for (i = 0; i < num_subgroups; i++) {
+ if (subgroups[i].bis_sync != 0xFFFFFFFF) {
+ for (j = 0; j < num_subgroups; j++) {
+ if (subgroups[i].bis_sync & bis_sync_mask) {
+ return BLE_HS_EINVAL;
+ }
+
+ bis_sync_mask |= subgroups[i].bis_sync;
+ }
+ }
+ }
+
+ return 0;
+}
+
ble_svc_audio_bass_modify_source(uint8_t *data, uint16_t data_len, uint16_t
conn_handle)
{
struct ble_svc_audio_bass_operation operation;
@@ -517,7 +516,7 @@ ble_svc_audio_bass_modify_source(uint8_t *data, uint16_t
data_len, uint16_t conn
}
for (i = 0; i < operation.modify_source.num_subgroups; i++) {
- operation.modify_source.bis_sync[i] = get_le32(&data[offset]);
+ operation.modify_source.subgroups.bis_sync[i] =
get_le32(&data[offset]);
offset += 4;
operation.modify_source.subgroups[i].metadata_length = data[offset++];
data_len -= 5;
@@ -532,7 +531,7 @@ ble_svc_audio_bass_modify_source(uint8_t *data, uint16_t
data_len, uint16_t conn
}
if (check_bis_sync(operation.modify_source.num_subgroups,
- operation.modify_source.bis_sync)) {
+ operation.modify_source.subgroups)) {
rc = BLE_HS_EINVAL;
ev.bass_operation_status.status = BLE_HS_EREJECT;
goto done;
diff --git a/nimble/host/audio/src/ble_audio_scan_delegator.c
b/nimble/host/audio/src/ble_audio_scan_delegator.c
index 60e04adc3..08a5ac645 100644
--- a/nimble/host/audio/src/ble_audio_scan_delegator.c
+++ b/nimble/host/audio/src/ble_audio_scan_delegator.c
@@ -197,8 +197,9 @@ bass_modify_source_op_handler(struct
ble_svc_audio_bass_operation *op, void *arg
BLE_AUDIO_DBG_ASSERT(sync_opt->num_subgroups <
ARRAY_SIZE(sync_opt->subgroups));
for (uint8_t i = 0; i < sync_opt->num_subgroups; i++) {
- sync_opt->subgroups[i].bis_sync = op->modify_source.bis_sync[i];
- /* FIXME: Missing metadata in Modify Source */
+ sync_opt->subgroups[i].bis_sync =
op->modify_source.subgroups[i].bis_sync_state;
+ sync_opt->subgroups[i].metadata_length =
op->modify_source.subgroups[i].metadata_length;
+ sync_opt->subgroups[i].metadata =
op->modify_source.subgroups[i].metadata;
}
action.type = BLE_AUDIO_SCAN_DELEGATOR_ACTION_SOURCE_MODIFY;