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 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 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); uint8_t (*callback)(const avdtp_stream_endpoint_t * stream_endpoint, const uint8_t * event, uint16_t size);
if (stream_endpoint->sep.type == AVDTP_SOURCE){ if (stream_endpoint->sep.type == AVDTP_SOURCE){
callback = avdtp_source_media_config_validator; callback = avdtp_source_media_config_validator;
@ -509,13 +518,6 @@ uint8_t avdtp_validate_media_configuration(const avdtp_stream_endpoint_t *stream
// config valid // config valid
return 0; 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); 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); 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, avdtp_signaling_setup_media_codec_sbc_config_event(uint8_t *event, uint16_t size,
const avdtp_stream_endpoint_t *stream_endpoint, const avdtp_stream_endpoint_t *stream_endpoint,
uint16_t avdtp_cid, uint8_t reconfigure, 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); btstack_assert(pos == AVDTP_MEDIA_CONFIG_SBC_EVENT_LEN);
*out_size = 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_mpeg_audio_config_event(uint8_t *event, uint16_t size, avdtp_signaling_setup_media_codec_mpeg_audio_config_event(uint8_t *event, uint16_t size,
const avdtp_stream_endpoint_t *stream_endpoint, const avdtp_stream_endpoint_t *stream_endpoint,
uint16_t avdtp_cid, uint8_t reconfigure, 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); btstack_assert(pos == AVDTP_MEDIA_CONFIG_MPEG_AUDIO_EVENT_LEN);
*out_size = 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_mpec_aac_config_event(uint8_t *event, uint16_t size, avdtp_signaling_setup_media_codec_mpec_aac_config_event(uint8_t *event, uint16_t size,
const avdtp_stream_endpoint_t *stream_endpoint, const avdtp_stream_endpoint_t *stream_endpoint,
uint16_t avdtp_cid, uint8_t reconfigure, 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); btstack_assert(AVDTP_MEDIA_CONFIG_MPEG_AAC_EVENT_LEN == pos);
*out_size = 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, avdtp_signaling_setup_media_codec_mpegd_config_event(uint8_t *event, uint16_t size,
const avdtp_stream_endpoint_t *stream_endpoint, const avdtp_stream_endpoint_t *stream_endpoint,
uint16_t avdtp_cid, uint8_t reconfigure, 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); btstack_assert(AVDTP_MEDIA_CONFIG_MPEG_D_USAC_EVENT_LEN == pos);
*out_size = 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, 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, const avdtp_stream_endpoint_t *stream_endpoint,
uint16_t avdtp_cid, uint8_t reconfigure, uint16_t avdtp_cid, uint8_t reconfigure,
const uint8_t *media_codec_information, const uint8_t *media_codec_information,
uint16_t *out_size) { uint16_t *out_size) {
btstack_assert(size >= AVDTP_MEDIA_CONFIG_ATRAC_EVENT_LEN); btstack_assert(size >= AVDTP_MEDIA_CONFIG_ATRAC_EVENT_LEN);
uint8_t local_seid = avdtp_local_seid(stream_endpoint); 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); btstack_assert(pos == AVDTP_MEDIA_CONFIG_ATRAC_EVENT_LEN);
*out_size = pos; *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, 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, 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) { uint16_t *out_size) {
btstack_assert(size >= AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN); btstack_assert(size >= AVDTP_MEDIA_CONFIG_OTHER_EVENT_LEN);
uint8_t local_seid = avdtp_local_seid(stream_endpoint); 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; pos += media_codec_len;
event[1] = pos - 2; event[1] = pos - 2;
*out_size = pos; *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) { 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); 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, 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) { 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 status;
switch (media_codec->media_codec_type){ switch (media_codec->media_codec_type){
case AVDTP_CODEC_SBC: case AVDTP_CODEC_SBC:
status = avdtp_signaling_setup_media_codec_sbc_config_event(event, size, stream_endpoint, avdtp_cid, reconfigure, 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_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); 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, 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, 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, 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);