avdtp: return size of the event via function parameter

This commit is contained in:
Milanka Ringwald 2025-02-17 17:43:51 +01:00
parent 818d819b00
commit c854544113
3 changed files with 29 additions and 17 deletions

View File

@ -510,7 +510,8 @@ uint8_t avdtp_validate_media_configuration(const avdtp_stream_endpoint_t *stream
return 0; return 0;
} }
uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; 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); return (*callback)(stream_endpoint, event, size);
} }

View File

@ -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_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, uint16_t avdtp_cid, uint8_t reconfigure, const adtvp_media_codec_capabilities_t *media_codec, uint16_t *out_size) {
const adtvp_media_codec_capabilities_t * media_codec) {
switch (media_codec->media_codec_type){ switch (media_codec->media_codec_type){
case AVDTP_CODEC_SBC: case AVDTP_CODEC_SBC:
return avdtp_signaling_setup_media_codec_sbc_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);
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,
media_codec->media_codec_information); 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: 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); media_codec->media_codec_information);
break;
case AVDTP_CODEC_MPEG_D_USAC: 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); media_codec->media_codec_information);
break;
default: 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); media_codec);
break;
} }
return *out_size;
} }
void avdtp_signaling_emit_configuration(avdtp_stream_endpoint_t *stream_endpoint, uint16_t avdtp_cid, uint8_t reconfigure, 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; uint16_t pos = 0;
// assume MEDIA_CONFIG_OTHER_EVENT_LEN is larger than all other events // assume MEDIA_CONFIG_OTHER_EVENT_LEN is larger than all other events
uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN]; uint8_t event[AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN];
pos = avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, avdtp_setup_media_codec_config_event(event, sizeof(event), stream_endpoint, avdtp_cid, reconfigure, &configuration->media_codec, &pos);
&configuration->media_codec);
btstack_packet_handler_t packet_handler = avdtp_packet_handler_for_stream_endpoint(stream_endpoint); btstack_packet_handler_t packet_handler = avdtp_packet_handler_for_stream_endpoint(stream_endpoint);
(*packet_handler)(HCI_EVENT_PACKET, 0, event, pos); (*packet_handler)(HCI_EVENT_PACKET, 0, event, pos);
} }

View File

@ -106,8 +106,8 @@ avdtp_signaling_emit_configuration(avdtp_stream_endpoint_t *stream_endpoint, uin
avdtp_capabilities_t *configuration, uint16_t configured_service_categories); 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_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, uint16_t avdtp_cid, uint8_t reconfigure,
const adtvp_media_codec_capabilities_t * media_codec); 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); void avdtp_streaming_emit_connection_established(avdtp_stream_endpoint_t *stream_endpoint, uint8_t status);