@@ -477,6 +477,69 @@ static void broadcast_source_cleanup(struct bt_bap_broadcast_source *source)
477477 (void )memset (source , 0 , sizeof (* source ));
478478}
479479
480+ static bool valid_broadcast_source_subgroup_param (
481+ const struct bt_bap_broadcast_source_subgroup_param * subgroup_param ,
482+ const struct bt_bap_broadcast_source * source )
483+ {
484+ CHECKIF (subgroup_param -> params == NULL ) {
485+ LOG_DBG ("subgroup_param->params is NULL" );
486+ return false;
487+ }
488+
489+ CHECKIF (!IN_RANGE (subgroup_param -> params_count , 1U ,
490+ CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT )) {
491+ LOG_DBG ("subgroup_param->count (%zu) is invalid" , subgroup_param -> params_count );
492+ return false;
493+ }
494+
495+ CHECKIF (!bt_audio_valid_codec_cfg (subgroup_param -> codec_cfg )) {
496+ LOG_DBG ("subgroup_param->codec_cfg is invalid" );
497+ return false;
498+ }
499+
500+ for (size_t i = 0U ; i < subgroup_param -> params_count ; i ++ ) {
501+ const struct bt_bap_broadcast_source_stream_param * stream_param ;
502+
503+ stream_param = & subgroup_param -> params [i ];
504+
505+ CHECKIF (stream_param -> stream == NULL ) {
506+ LOG_DBG ("subgroup_param->stream_params[%zu]->stream is NULL" , i );
507+ return false;
508+ }
509+
510+ CHECKIF (stream_param -> stream -> group != NULL &&
511+ stream_param -> stream -> group != source ) {
512+ LOG_DBG ("subgroup_param->stream_params[%zu]->stream is already part of "
513+ "group %p" ,
514+ i , stream_param -> stream -> group );
515+ return false;
516+ }
517+
518+ #if CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0
519+ CHECKIF (stream_param -> data == NULL && stream_param -> data_len != 0 ) {
520+ LOG_DBG ("subgroup_param->stream_params[%zu]->data is NULL with len %zu" , i ,
521+ stream_param -> data_len );
522+ return false;
523+ }
524+
525+ CHECKIF (stream_param -> data_len > CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE ) {
526+ LOG_DBG ("subgroup_param->stream_params[%zu]->data_len too large: %zu > %d" ,
527+ i , stream_param -> data_len , CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE );
528+ return false;
529+ }
530+
531+ CHECKIF (stream_param -> data != NULL &&
532+ subgroup_param -> codec_cfg -> id == BT_HCI_CODING_FORMAT_LC3 &&
533+ !bt_audio_valid_ltv (stream_param -> data , stream_param -> data_len )) {
534+ LOG_DBG ("subgroup_param->stream_params[%zu]->data not valid LTV" , i );
535+ return false;
536+ }
537+ }
538+ #endif /* CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0 */
539+
540+ return true;
541+ }
542+
480543static bool valid_broadcast_source_param (const struct bt_bap_broadcast_source_param * param ,
481544 const struct bt_bap_broadcast_source * source )
482545{
@@ -529,68 +592,10 @@ static bool valid_broadcast_source_param(const struct bt_bap_broadcast_source_pa
529592
530593 subgroup_param = & param -> params [i ];
531594
532- CHECKIF (subgroup_param -> params == NULL ) {
533- LOG_DBG ("subgroup_params[%zu].params is NULL" , i );
534- return false;
535- }
536-
537- CHECKIF (!IN_RANGE (subgroup_param -> params_count , 1U ,
538- CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT )) {
539- LOG_DBG ("subgroup_params[%zu].count (%zu) is invalid" , i ,
540- subgroup_param -> params_count );
595+ if (!valid_broadcast_source_subgroup_param (subgroup_param , source )) {
596+ LOG_DBG ("subgroup_params[%zu] is invalid" , i );
541597 return false;
542598 }
543-
544- CHECKIF (!bt_audio_valid_codec_cfg (subgroup_param -> codec_cfg )) {
545- LOG_DBG ("subgroup_params[%zu].codec_cfg is invalid" , i );
546- return false;
547- }
548-
549- for (size_t j = 0U ; j < subgroup_param -> params_count ; j ++ ) {
550- const struct bt_bap_broadcast_source_stream_param * stream_param ;
551-
552- stream_param = & subgroup_param -> params [j ];
553-
554- CHECKIF (stream_param -> stream == NULL ) {
555- LOG_DBG ("subgroup_params[%zu].stream_params[%zu]->stream is NULL" ,
556- i , j );
557- return false;
558- }
559-
560- CHECKIF (stream_param -> stream -> group != NULL &&
561- stream_param -> stream -> group != source ) {
562- LOG_DBG ("subgroup_params[%zu].stream_params[%zu]->stream is "
563- "already part of group %p" ,
564- i , j , stream_param -> stream -> group );
565- return false;
566- }
567-
568- #if CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0
569- CHECKIF (stream_param -> data == NULL && stream_param -> data_len != 0 ) {
570- LOG_DBG ("subgroup_params[%zu].stream_params[%zu]->data is "
571- "NULL with len %zu" ,
572- i , j , stream_param -> data_len );
573- return false;
574- }
575-
576- CHECKIF (stream_param -> data_len > CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE ) {
577- LOG_DBG ("subgroup_params[%zu].stream_params[%zu]->data_len too "
578- "large: %zu > %d" ,
579- i , j , stream_param -> data_len ,
580- CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE );
581- return false;
582- }
583-
584- CHECKIF (stream_param -> data != NULL &&
585- subgroup_param -> codec_cfg -> id == BT_HCI_CODING_FORMAT_LC3 &&
586- !bt_audio_valid_ltv (stream_param -> data , stream_param -> data_len )) {
587- LOG_DBG ("subgroup_params[%zu].stream_params[%zu]->data not valid "
588- "LTV" ,
589- i , j );
590- return false;
591- }
592- }
593- #endif /* CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0 */
594599 }
595600
596601 return true;
0 commit comments