Skip to content

Commit

Permalink
nimble/audio: Add subgroups information for modify operation
Browse files Browse the repository at this point in the history
This commit adds subgroups info for modify source operation.
Now metadata field can be handled in scan delegator during
modify procedure.
  • Loading branch information
szymon-czapracki committed Oct 23, 2024
1 parent aafa677 commit 5863fda
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
25 changes: 23 additions & 2 deletions nimble/host/audio/services/bass/src/ble_audio_svc_bass.c
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,27 @@ ble_svc_audio_bass_add_source(uint8_t *data, uint16_t data_len, uint16_t conn_ha
}

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;
Expand Down Expand Up @@ -517,7 +538,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;
Expand All @@ -532,7 +553,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;
Expand Down
5 changes: 3 additions & 2 deletions nimble/host/audio/src/ble_audio_scan_delegator.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 5863fda

Please sign in to comment.