From 37968a719cae106dc4b15e22ae2fff61558c4afe Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Mon, 17 Feb 2025 18:26:36 +0100 Subject: [PATCH] avdtp: return codec specific error code --- src/classic/avdtp.c | 16 ++++++++------ src/classic/avdtp_util.c | 46 ++++++++++++++++++++-------------------- src/classic/avdtp_util.h | 6 +++--- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/src/classic/avdtp.c b/src/classic/avdtp.c index a68ab4472..f974d5ce7 100644 --- a/src/classic/avdtp.c +++ b/src/classic/avdtp.c @@ -499,6 +499,15 @@ void avdtp_source_register_media_config_validator(uint8_t (*callback)(const avdt uint8_t avdtp_validate_media_configuration(const avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, const adtvp_media_codec_capabilities_t *media_codec) { + + uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; + uint16_t size = 0; + codec_specific_error_code_t codec_specific_error_code = avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, media_codec, &size); + + if (codec_specific_error_code != CODEC_SPECIFIC_ERROR_CODE_ACCEPT){ + return (uint8_t) codec_specific_error_code; + } + uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size); if (stream_endpoint->sep.type == AVDTP_SOURCE){ callback = avdtp_source_media_config_validator; @@ -509,13 +518,6 @@ uint8_t avdtp_validate_media_configuration(const avdtp_stream_endpoint_t *stream // config valid return 0; } - uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; - - uint16_t size = 0; - uint8_t status = avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, media_codec, &size); - if (status != ERROR_CODE_SUCCESS){ - return status; - } return (*callback)(stream_endpoint, event, size); } diff --git a/src/classic/avdtp_util.c b/src/classic/avdtp_util.c index 7fea7899f..973f63f98 100644 --- a/src/classic/avdtp_util.c +++ b/src/classic/avdtp_util.c @@ -1003,7 +1003,7 @@ void avdtp_signaling_emit_capabilities(uint16_t avdtp_cid, uint8_t remote_seid, avdtp_signaling_emit_capability_done(avdtp_cid, remote_seid); } -static uint8_t +static codec_specific_error_code_t avdtp_signaling_setup_media_codec_sbc_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, @@ -1091,10 +1091,10 @@ avdtp_signaling_setup_media_codec_sbc_config_event(uint8_t *event, uint16_t size btstack_assert(pos == AVDTP_MEDIA_CONFIG_SBC_EVENT_LEN); *out_size = pos; - return ERROR_CODE_SUCCESS; + return CODEC_SPECIFIC_ERROR_CODE_ACCEPT; } -static uint8_t +static codec_specific_error_code_t avdtp_signaling_setup_media_codec_mpeg_audio_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, @@ -1186,10 +1186,10 @@ avdtp_signaling_setup_media_codec_mpeg_audio_config_event(uint8_t *event, uint16 btstack_assert(pos == AVDTP_MEDIA_CONFIG_MPEG_AUDIO_EVENT_LEN); *out_size = pos; - return ERROR_CODE_SUCCESS; + return CODEC_SPECIFIC_ERROR_CODE_ACCEPT; } -static uint8_t +static codec_specific_error_code_t avdtp_signaling_setup_media_codec_mpec_aac_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, @@ -1261,10 +1261,10 @@ avdtp_signaling_setup_media_codec_mpec_aac_config_event(uint8_t *event, uint16_t btstack_assert(AVDTP_MEDIA_CONFIG_MPEG_AAC_EVENT_LEN == pos); *out_size = pos; - return ERROR_CODE_SUCCESS; + return CODEC_SPECIFIC_ERROR_CODE_ACCEPT; } -static uint8_t +static codec_specific_error_code_t avdtp_signaling_setup_media_codec_mpegd_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, @@ -1326,14 +1326,14 @@ avdtp_signaling_setup_media_codec_mpegd_config_event(uint8_t *event, uint16_t si btstack_assert(AVDTP_MEDIA_CONFIG_MPEG_D_USAC_EVENT_LEN == pos); *out_size = pos; - return ERROR_CODE_SUCCESS; + return CODEC_SPECIFIC_ERROR_CODE_ACCEPT; } -static uint8_t avdtp_signaling_setup_media_codec_atrac_config_event(uint8_t *event, uint16_t size, - const avdtp_stream_endpoint_t *stream_endpoint, - uint16_t avdtp_cid, uint8_t reconfigure, - const uint8_t *media_codec_information, - uint16_t *out_size) { +static codec_specific_error_code_t avdtp_signaling_setup_media_codec_atrac_config_event(uint8_t *event, uint16_t size, + const avdtp_stream_endpoint_t *stream_endpoint, + uint16_t avdtp_cid, uint8_t reconfigure, + const uint8_t *media_codec_information, + uint16_t *out_size) { btstack_assert(size >= AVDTP_MEDIA_CONFIG_ATRAC_EVENT_LEN); uint8_t local_seid = avdtp_local_seid(stream_endpoint); @@ -1399,14 +1399,14 @@ static uint8_t avdtp_signaling_setup_media_codec_atrac_config_event(uint8_t *eve btstack_assert(pos == AVDTP_MEDIA_CONFIG_ATRAC_EVENT_LEN); *out_size = pos; - return ERROR_CODE_SUCCESS; + return CODEC_SPECIFIC_ERROR_CODE_ACCEPT; } -static uint8_t avdtp_signaling_setup_media_codec_other_config_event(uint8_t *event, uint16_t size, - const avdtp_stream_endpoint_t *stream_endpoint, - uint16_t avdtp_cid, uint8_t reconfigure, - const adtvp_media_codec_capabilities_t *media_codec, - uint16_t *out_size) { +static codec_specific_error_code_t avdtp_signaling_setup_media_codec_other_config_event(uint8_t *event, uint16_t size, + const avdtp_stream_endpoint_t *stream_endpoint, + uint16_t avdtp_cid, uint8_t reconfigure, + const adtvp_media_codec_capabilities_t *media_codec, + uint16_t *out_size) { btstack_assert(size >= AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN); uint8_t local_seid = avdtp_local_seid(stream_endpoint); @@ -1434,7 +1434,7 @@ static uint8_t avdtp_signaling_setup_media_codec_other_config_event(uint8_t *eve pos += media_codec_len; event[1] = pos - 2; *out_size = pos; - return ERROR_CODE_SUCCESS; + return CODEC_SPECIFIC_ERROR_CODE_ACCEPT; } void avdtp_signaling_emit_delay(uint16_t avdtp_cid, uint8_t local_seid, uint16_t delay) { @@ -1451,9 +1451,9 @@ void avdtp_signaling_emit_delay(uint16_t avdtp_cid, uint8_t local_seid, uint16_t avdtp_emit_source(event, pos); } -uint8_t avdtp_setup_media_codec_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, - uint16_t avdtp_cid, uint8_t reconfigure, const adtvp_media_codec_capabilities_t *media_codec, uint16_t *out_size) { - uint8_t status; +codec_specific_error_code_t avdtp_setup_media_codec_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, + uint16_t avdtp_cid, uint8_t reconfigure, const adtvp_media_codec_capabilities_t *media_codec, uint16_t *out_size) { + codec_specific_error_code_t status; switch (media_codec->media_codec_type){ case AVDTP_CODEC_SBC: status = avdtp_signaling_setup_media_codec_sbc_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, diff --git a/src/classic/avdtp_util.h b/src/classic/avdtp_util.h index a7590a55b..fe9fdf2c7 100644 --- a/src/classic/avdtp_util.h +++ b/src/classic/avdtp_util.h @@ -105,9 +105,9 @@ void avdtp_signaling_emit_configuration(avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, avdtp_capabilities_t *configuration, uint16_t configured_service_categories); -uint8_t avdtp_setup_media_codec_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, - uint16_t avdtp_cid, uint8_t reconfigure, - const adtvp_media_codec_capabilities_t *media_codec, uint16_t *out_size); +codec_specific_error_code_t avdtp_setup_media_codec_config_event(uint8_t *event, uint16_t size, const avdtp_stream_endpoint_t *stream_endpoint, + uint16_t avdtp_cid, uint8_t reconfigure, + const adtvp_media_codec_capabilities_t *media_codec, uint16_t *out_size); void avdtp_streaming_emit_connection_established(avdtp_stream_endpoint_t *stream_endpoint, uint8_t status);