avdtp: return codec specific error code

This commit is contained in:
Milanka Ringwald 2025-02-17 18:26:36 +01:00
parent 8a1de4839a
commit 37968a719c
3 changed files with 35 additions and 33 deletions

View File

@ -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);
}

View File

@ -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,

View File

@ -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);