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 authored and sjanc committed Oct 28, 2024
1 parent b0c3e4a commit 1fa9dfd
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 29 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
49 changes: 24 additions & 25 deletions nimble/host/audio/services/bass/src/ble_audio_svc_bass.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -466,6 +444,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 +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;
Expand All @@ -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;
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 1fa9dfd

Please sign in to comment.