From a0ed80bdc9c7c96418b448be9c681d5e85ece8d0 Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Tue, 18 Apr 2017 10:51:31 +0200 Subject: [PATCH] move config to stream endpoint --- src/classic/avdtp.c | 14 ++++++++++---- src/classic/avdtp.h | 8 +++++--- src/classic/avdtp_initiator.c | 6 +++--- test/avdtp/avdtp_source_demo.c | 15 +-------------- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/classic/avdtp.c b/src/classic/avdtp.c index cfe17bb4b..8a4b05db8 100644 --- a/src/classic/avdtp.c +++ b/src/classic/avdtp.c @@ -674,8 +674,8 @@ void avdtp_set_configuration(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_s connection->initiator_transaction_label++; connection->acp_seid = acp_seid; connection->int_seid = int_seid; - connection->remote_capabilities_bitmap = configured_services_bitmap; - connection->remote_capabilities = configuration; + stream_endpoint->remote_capabilities_bitmap = configured_services_bitmap; + stream_endpoint->remote_capabilities = configuration; stream_endpoint->initiator_config_state = AVDTP_INITIATOR_W2_SET_CONFIGURATION; avdtp_request_can_send_now_initiator(connection, connection->l2cap_signaling_cid); } @@ -704,8 +704,8 @@ void avdtp_reconfigure(uint16_t avdtp_cid, uint8_t int_seid, uint8_t acp_seid, u connection->initiator_transaction_label++; connection->acp_seid = acp_seid; connection->int_seid = stream_endpoint->sep.seid; - connection->remote_capabilities_bitmap = configured_services_bitmap; - connection->remote_capabilities = configuration; + stream_endpoint->remote_capabilities_bitmap = configured_services_bitmap; + stream_endpoint->remote_capabilities = configuration; stream_endpoint->initiator_config_state = AVDTP_INITIATOR_W2_RECONFIGURE_STREAM_WITH_SEID; avdtp_request_can_send_now_initiator(connection, connection->l2cap_signaling_cid); } @@ -772,6 +772,12 @@ void avdtp_initialize_sbc_configuration_storage(avdtp_stream_endpoint_t * stream config_storage[1] = (block_length << 4) | (subbands << 2) | allocation_method; config_storage[2] = min_bitpool_value; config_storage[3] = max_bitpool_value; + + stream_endpoint->remote_configuration_bitmap = store_bit16(stream_endpoint->remote_configuration_bitmap, AVDTP_MEDIA_CODEC, 1); + stream_endpoint->remote_configuration.media_codec.media_type = AVDTP_AUDIO; + stream_endpoint->remote_configuration.media_codec.media_codec_type = AVDTP_CODEC_SBC; + stream_endpoint->remote_configuration.media_codec.media_codec_information_len = storage_size; + stream_endpoint->remote_configuration.media_codec.media_codec_information = config_storage; } uint8_t avdtp_choose_sbc_channel_mode(avdtp_stream_endpoint_t * stream_endpoint, uint8_t remote_channel_mode_bitmap){ diff --git a/src/classic/avdtp.h b/src/classic/avdtp.h index 87efb2384..bca2ad4d3 100644 --- a/src/classic/avdtp.h +++ b/src/classic/avdtp.h @@ -410,9 +410,6 @@ typedef struct { uint8_t int_seid; uint8_t acp_seid; - avdtp_capabilities_t remote_capabilities; - uint16_t remote_capabilities_bitmap; - uint8_t wait_to_send_acceptor; uint8_t wait_to_send_initiator; uint8_t wait_to_send_self; @@ -448,6 +445,11 @@ typedef struct avdtp_stream_endpoint { avdtp_connection_t * connection; // currently active remote seid uint8_t remote_sep_index; + avdtp_capabilities_t remote_capabilities; + uint16_t remote_capabilities_bitmap; + + uint16_t remote_configuration_bitmap; + avdtp_capabilities_t remote_configuration; // register request for media L2cap connection release uint8_t media_disconnect; uint8_t media_connect; diff --git a/src/classic/avdtp_initiator.c b/src/classic/avdtp_initiator.c index 3ec0d08e7..a198647d9 100644 --- a/src/classic/avdtp_initiator.c +++ b/src/classic/avdtp_initiator.c @@ -172,8 +172,8 @@ void avdtp_initiator_stream_config_subsm(avdtp_connection_t * connection, uint8_ case AVDTP_SI_SET_CONFIGURATION:{ printf("AVDTP_SI_SET_CONFIGURATION\n"); - sep.configured_service_categories = connection->remote_capabilities_bitmap; - sep.configuration = connection->remote_capabilities; + sep.configured_service_categories = stream_endpoint->remote_capabilities_bitmap; + sep.configuration = stream_endpoint->remote_capabilities; sep.in_use = 1; // TODO check if configuration is supported @@ -307,7 +307,7 @@ void avdtp_initiator_stream_config_subsm_run(avdtp_connection_t * connection, av connection->signaling_packet.signal_identifier = AVDTP_SI_RECONFIGURE; } - avdtp_prepare_capabilities(&connection->signaling_packet, connection->initiator_transaction_label, connection->remote_capabilities_bitmap, connection->remote_capabilities, connection->signaling_packet.signal_identifier); + avdtp_prepare_capabilities(&connection->signaling_packet, connection->initiator_transaction_label, stream_endpoint->remote_capabilities_bitmap, stream_endpoint->remote_capabilities, connection->signaling_packet.signal_identifier); l2cap_reserve_packet_buffer(); uint8_t * out_buffer = l2cap_get_outgoing_buffer(); uint16_t pos = avdtp_signaling_create_fragment(connection->l2cap_signaling_cid, &connection->signaling_packet, out_buffer); diff --git a/test/avdtp/avdtp_source_demo.c b/test/avdtp/avdtp_source_demo.c index 2a18f6617..d1271ae1a 100644 --- a/test/avdtp/avdtp_source_demo.c +++ b/test/avdtp/avdtp_source_demo.c @@ -117,11 +117,7 @@ static uint8_t sdp_avdtp_source_service_buffer[150]; static avdtp_stream_endpoint_t * local_stream_endpoint; -static uint16_t remote_configuration_bitmap; -static avdtp_capabilities_t remote_configuration; -// static avdtp_sep_t remote_seps[MAX_NUM_SEPS]; -// static uint16_t num_remote_seps = 0; static int next_remote_sep_index_to_query = -1; static avdtp_sep_t * active_remote_sep = NULL; @@ -246,17 +242,8 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe break; case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CAPABILITY:{ - avdtp_initialize_sbc_configuration_storage(local_stream_endpoint, media_sbc_codec_configuration, sizeof(media_sbc_codec_configuration), packet, size); - - app_state = AVDTP_APPLICATION_W2_SET_CONFIGURATION; - active_remote_sep = avdtp_source_remote_sep(avdtp_cid, next_remote_sep_index_to_query); - remote_configuration_bitmap = store_bit16(remote_configuration_bitmap, AVDTP_MEDIA_CODEC, 1); - remote_configuration.media_codec.media_type = AVDTP_AUDIO; - remote_configuration.media_codec.media_codec_type = AVDTP_CODEC_SBC; - remote_configuration.media_codec.media_codec_information_len = sizeof(media_sbc_codec_configuration); - remote_configuration.media_codec.media_codec_information = media_sbc_codec_configuration; app_state = AVDTP_APPLICATION_W2_SET_CONFIGURATION; break; } @@ -306,7 +293,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe break; case AVDTP_APPLICATION_W2_SET_CONFIGURATION: app_state = AVDTP_APPLICATION_W2_GET_CONFIGURATION; - avdtp_source_set_configuration(avdtp_cid, local_stream_endpoint->sep.seid, active_remote_sep->seid, remote_configuration_bitmap, remote_configuration); + avdtp_source_set_configuration(avdtp_cid, local_stream_endpoint->sep.seid, active_remote_sep->seid, local_stream_endpoint->remote_configuration_bitmap, local_stream_endpoint->remote_configuration); break; case AVDTP_APPLICATION_W2_GET_CONFIGURATION: app_state = AVDTP_APPLICATION_W2_OPEN_STREAM_WITH_SEID;