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 Sep 23, 2024
1 parent 519c14b commit 078e6a9
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -324,8 +324,9 @@ 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];
} modify_source;

/**
Expand Down
12 changes: 6 additions & 6 deletions nimble/host/audio/services/bass/src/ble_audio_svc_bass.c
Original file line number Diff line number Diff line change
Expand Up @@ -424,20 +424,20 @@ 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, const uint32_t *bis_sync_list)
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 (bis_sync_list[i] != 0xFFFFFFFF) {
if (subgroups[i].bis_sync != 0xFFFFFFFF) {
for (j = 0; j < num_subgroups; j++) {
if (bis_sync_list[i] & bis_sync_mask) {
if (subgroups[i].bis_sync & bis_sync_mask) {
return BLE_HS_EINVAL;
}

bis_sync_mask |= bis_sync_list[i];
bis_sync_mask |= subgroups[i].bis_sync;
}
}
}
Expand Down Expand Up @@ -496,12 +496,12 @@ 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;
}

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 078e6a9

Please sign in to comment.