From c8545441130df58386f1037db857cd776a32b02a Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Mon, 17 Feb 2025 17:43:51 +0100 Subject: [PATCH] avdtp: return size of the event via function parameter --- src/classic/avdtp.c | 3 ++- src/classic/avdtp_util.c | 39 +++++++++++++++++++++++++-------------- src/classic/avdtp_util.h | 4 ++-- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/classic/avdtp.c b/src/classic/avdtp.c index 5c0e464d1..96b377b5f 100644 --- a/src/classic/avdtp.c +++ b/src/classic/avdtp.c @@ -510,7 +510,8 @@ uint8_t avdtp_validate_media_configuration(const avdtp_stream_endpoint_t *stream return 0; } uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; - uint16_t size = avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, media_codec); + uint16_t size = 0; + avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, media_codec, &size); return (*callback)(stream_endpoint, event, size); } diff --git a/src/classic/avdtp_util.c b/src/classic/avdtp_util.c index f8e6b428f..707b4334e 100644 --- a/src/classic/avdtp_util.c +++ b/src/classic/avdtp_util.c @@ -1444,28 +1444,40 @@ void avdtp_signaling_emit_delay(uint16_t avdtp_cid, uint8_t local_seid, uint16_t } uint16_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 avdtp_cid, uint8_t reconfigure, const adtvp_media_codec_capabilities_t *media_codec, uint16_t *out_size) { switch (media_codec->media_codec_type){ case AVDTP_CODEC_SBC: - return avdtp_signaling_setup_media_codec_sbc_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, - media_codec->media_codec_information); - case AVDTP_CODEC_MPEG_1_2_AUDIO: - return avdtp_signaling_setup_media_codec_mpeg_audio_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, - media_codec->media_codec_information); - case AVDTP_CODEC_MPEG_2_4_AAC: - return avdtp_signaling_setup_media_codec_mpec_aac_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, + *out_size = avdtp_signaling_setup_media_codec_sbc_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, media_codec->media_codec_information); + break; + + case AVDTP_CODEC_MPEG_1_2_AUDIO: + *out_size = avdtp_signaling_setup_media_codec_mpeg_audio_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, + media_codec->media_codec_information); + break; + + case AVDTP_CODEC_MPEG_2_4_AAC: + *out_size = avdtp_signaling_setup_media_codec_mpec_aac_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, + media_codec->media_codec_information); + break; + case AVDTP_CODEC_ATRAC_FAMILY: - return avdtp_signaling_setup_media_codec_atrac_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, + *out_size = avdtp_signaling_setup_media_codec_atrac_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, media_codec->media_codec_information); + break; + case AVDTP_CODEC_MPEG_D_USAC: - return avdtp_signaling_setup_media_codec_mpegd_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, + *out_size = avdtp_signaling_setup_media_codec_mpegd_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, media_codec->media_codec_information); + break; + default: - return avdtp_signaling_setup_media_codec_other_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, + *out_size = avdtp_signaling_setup_media_codec_other_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, media_codec); + break; } + + return *out_size; } void avdtp_signaling_emit_configuration(avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, @@ -1475,8 +1487,7 @@ void avdtp_signaling_emit_configuration(avdtp_stream_endpoint_t *stream_endpoint uint16_t pos = 0; // assume MEDIA_CONFIG_OTHER_EVENT_LEN is larger than all other events uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; - pos = avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, - &configuration->media_codec); + avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, &configuration->media_codec, &pos); btstack_packet_handler_t packet_handler = avdtp_packet_handler_for_stream_endpoint(stream_endpoint); (*packet_handler)(HCI_EVENT_PACKET, 0, event, pos); } diff --git a/src/classic/avdtp_util.h b/src/classic/avdtp_util.h index b463530c3..b2097c99b 100644 --- a/src/classic/avdtp_util.h +++ b/src/classic/avdtp_util.h @@ -106,8 +106,8 @@ avdtp_signaling_emit_configuration(avdtp_stream_endpoint_t *stream_endpoint, uin avdtp_capabilities_t *configuration, uint16_t configured_service_categories); uint16_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 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);