diff --git a/src/classic/a2dp_sink.c b/src/classic/a2dp_sink.c index 4cd477195..7ab97182d 100644 --- a/src/classic/a2dp_sink.c +++ b/src/classic/a2dp_sink.c @@ -223,7 +223,7 @@ static inline void a2dp_signaling_emit_media_codec_sbc(btstack_packet_handler_t static inline void avdtp_signaling_emit_media_codec_other(btstack_packet_handler_t callback, uint8_t * event, uint16_t event_size){ if (!callback) return; - if (event_size < 112) return; + if (event_size < 113) return; event[0] = HCI_EVENT_A2DP_META; event[2] = A2DP_SUBEVENT_SIGNALING_MEDIA_CODEC_OTHER_CONFIGURATION; } diff --git a/src/classic/avdtp_acceptor.c b/src/classic/avdtp_acceptor.c index 02b8001cf..e114bf046 100644 --- a/src/classic/avdtp_acceptor.c +++ b/src/classic/avdtp_acceptor.c @@ -215,11 +215,11 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t if (stream_endpoint->remote_sep_index != AVDTP_INVALID_SEP_INDEX){ if (stream_endpoint->connection->remote_seps[stream_endpoint->remote_sep_index].in_use){ - if (stream_endpoint->state < AVDTP_STREAM_ENDPOINT_OPENED){ - stream_endpoint->connection->remote_seps[stream_endpoint->remote_sep_index] = sep; - log_info(" ACP: update seid %d, to %p", stream_endpoint->connection->remote_seps[stream_endpoint->remote_sep_index].seid, stream_endpoint); - break; - } + // if (stream_endpoint->state < AVDTP_STREAM_ENDPOINT_OPENED){ + // stream_endpoint->connection->remote_seps[stream_endpoint->remote_sep_index] = sep; + // log_info(" ACP: update seid %d, to %p", stream_endpoint->connection->remote_seps[stream_endpoint->remote_sep_index].seid, stream_endpoint); + // break; + // } // reject if already configured connection->error_code = SEP_IN_USE; // find first registered category and fire the error @@ -261,14 +261,11 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t case AVDTP_SI_RECONFIGURE:{ stream_endpoint->acceptor_config_state = AVDTP_ACCEPTOR_W2_ANSWER_RECONFIGURE; connection->reject_service_category = 0; - + avdtp_sep_t sep; sep.seid = connection->local_seid; log_info(" ACP: AVDTP_ACCEPTOR_W2_ANSWER_RECONFIGURE seid %d", sep.seid); - // log_info_hexdump(connection->signaling_packet.command, packet_size); - sep.configured_service_categories = avdtp_unpack_service_capabilities(connection, &sep.configuration, connection->signaling_packet.command+offset, packet_size-offset); - if (connection->error_code){ // fire configuration parsing errors connection->reject_signal_identifier = connection->signaling_packet.signal_identifier; @@ -277,7 +274,6 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t } // find sep or raise error - stream_endpoint->remote_sep_index = avdtp_find_remote_sep(stream_endpoint->connection, sep.seid); if (stream_endpoint->remote_sep_index == AVDTP_INVALID_SEP_INDEX){ log_info(" ACP: REJECT AVDTP_SI_RECONFIGURE, BAD_ACP_SEID"); @@ -292,10 +288,10 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t if (get_bit16(sep.configured_service_categories, AVDTP_MEDIA_CODEC)){ switch (sep.capabilities.media_codec.media_codec_type){ case AVDTP_CODEC_SBC: - avdtp_signaling_emit_media_codec_sbc_reconfiguration(context->avdtp_callback, connection->avdtp_cid, avdtp_local_seid(stream_endpoint), avdtp_remote_seid(stream_endpoint), sep.capabilities.media_codec); + avdtp_signaling_emit_media_codec_sbc_reconfiguration(context->avdtp_callback, connection->avdtp_cid, avdtp_local_seid(stream_endpoint), avdtp_remote_seid(stream_endpoint), sep.configuration.media_codec); break; default: - avdtp_signaling_emit_media_codec_other_reconfiguration(context->avdtp_callback, connection->avdtp_cid, avdtp_local_seid(stream_endpoint), avdtp_remote_seid(stream_endpoint), sep.capabilities.media_codec); + avdtp_signaling_emit_media_codec_other_reconfiguration(context->avdtp_callback, connection->avdtp_cid, avdtp_local_seid(stream_endpoint), avdtp_remote_seid(stream_endpoint), sep.configuration.media_codec); break; } } diff --git a/src/classic/avdtp_util.c b/src/classic/avdtp_util.c index 5b34261d8..b623ab1dd 100644 --- a/src/classic/avdtp_util.c +++ b/src/classic/avdtp_util.c @@ -47,6 +47,8 @@ #include "avdtp.h" #include "avdtp_util.h" +#define MAX_MEDIA_CODEC_INFORMATION_LENGTH 100 + void avdtp_initialize_stream_endpoint(avdtp_stream_endpoint_t * stream_endpoint){ stream_endpoint->connection = NULL; stream_endpoint->state = AVDTP_STREAM_ENDPOINT_IDLE; @@ -752,7 +754,7 @@ void avdtp_signaling_emit_media_codec_sbc_reconfiguration(btstack_packet_handler } static inline void avdtp_signaling_emit_media_codec_other(btstack_packet_handler_t callback, uint16_t avdtp_cid, uint8_t local_seid, uint8_t remote_seid, adtvp_media_codec_capabilities_t media_codec, uint8_t reconfigure){ - uint8_t event[112]; + uint8_t event[MAX_MEDIA_CODEC_INFORMATION_LENGTH + 13]; int pos = 0; event[pos++] = HCI_EVENT_AVDTP_META; event[pos++] = sizeof(event) - 2; @@ -762,18 +764,15 @@ static inline void avdtp_signaling_emit_media_codec_other(btstack_packet_handler event[pos++] = local_seid; event[pos++] = remote_seid; event[pos++] = reconfigure; - event[pos++] = media_codec.media_type; little_endian_store_16(event, pos, media_codec.media_codec_type); pos += 2; little_endian_store_16(event, pos, media_codec.media_codec_information_len); pos += 2; - if (media_codec.media_codec_information_len < 100){ - memcpy(event+pos, media_codec.media_codec_information, media_codec.media_codec_information_len); - } else { - memcpy(event+pos, media_codec.media_codec_information, 100); - } + int media_codec_len = btstack_min(MAX_MEDIA_CODEC_INFORMATION_LENGTH, media_codec.media_codec_information_len); + memcpy(event+pos, media_codec.media_codec_information, media_codec_len); + (*callback)(HCI_EVENT_PACKET, 0, event, sizeof(event)); } diff --git a/test/pts/.gitignore b/test/pts/.gitignore index 3862fd1cf..e481ff64a 100644 --- a/test/pts/.gitignore +++ b/test/pts/.gitignore @@ -1,4 +1,6 @@ ancs_client +avdtp_sink.sbc +avdtp_sink.wav avdtp_sink_test avdtp_source_test avrcp_test diff --git a/test/pts/avdtp_sink_test.c b/test/pts/avdtp_sink_test.c index fb3f6750a..592cdc5aa 100644 --- a/test/pts/avdtp_sink_test.c +++ b/test/pts/avdtp_sink_test.c @@ -142,29 +142,10 @@ static uint16_t remote_configuration_bitmap; static avdtp_capabilities_t remote_configuration; static avdtp_context_t a2dp_sink_context; -typedef enum { - AVDTP_APPLICATION_IDLE, - AVDTP_APPLICATION_W2_DISCOVER_SEPS, - AVDTP_APPLICATION_W2_GET_CAPABILITIES, - AVDTP_APPLICATION_W2_GET_ALL_CAPABILITIES, - AVDTP_APPLICATION_W2_SET_CONFIGURATION, - AVDTP_APPLICATION_W2_SUSPEND_STREAM_WITH_SEID, - AVDTP_APPLICATION_W2_RECONFIGURE_WITH_SEID, - AVDTP_APPLICATION_W2_OPEN_STREAM_WITH_SEID, - AVDTP_APPLICATION_W2_START_STREAM_WITH_SEID, - AVDTP_APPLICATION_W2_ABORT_STREAM_WITH_SEID, - AVDTP_APPLICATION_W2_STOP_STREAM_WITH_SEID, - AVDTP_APPLICATION_W2_GET_CONFIGURATION -} avdtp_application_state_t; - -avdtp_application_state_t app_state = AVDTP_APPLICATION_IDLE; - static btstack_packet_callback_registration_t hci_event_callback_registration; static int media_initialized = 0; - - #ifdef HAVE_PORTAUDIO static int patestCallback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, @@ -411,95 +392,76 @@ static void dump_sbc_configuration(avdtp_media_codec_configuration_sbc_t configu static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ - + if (packet_type != HCI_EVENT_PACKET) return; + if (hci_event_packet_get_type(packet) != HCI_EVENT_AVDTP_META) return; UNUSED(channel); UNUSED(size); - - bd_addr_t event_addr; - switch (packet_type) { - - case HCI_EVENT_PACKET: - switch (hci_event_packet_get_type(packet)) { - case HCI_EVENT_PIN_CODE_REQUEST: - // inform about pin code request - printf("Pin code request - using '0000'\n"); - hci_event_pin_code_request_get_bd_addr(packet, event_addr); - gap_pin_code_response(event_addr, "0000"); - break; - case HCI_EVENT_DISCONNECTION_COMPLETE: - // connection closed -> quit test app - printf("\n --- avdtp_test: HCI_EVENT_DISCONNECTION_COMPLETE ---\n"); - close_media_processing(); - break; - case HCI_EVENT_AVDTP_META: - switch (packet[2]){ - case AVDTP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED: - avdtp_cid = avdtp_subevent_signaling_connection_established_get_avdtp_cid(packet); - printf("\n --- avdtp_test: AVDTP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED, cid 0x%02x ---\n", avdtp_cid); - break; - case AVDTP_SUBEVENT_SIGNALING_SEP_FOUND: - if (app_state != AVDTP_APPLICATION_W2_DISCOVER_SEPS) return; - sep.seid = avdtp_subevent_signaling_sep_found_get_remote_seid(packet); - sep.in_use = avdtp_subevent_signaling_sep_found_get_in_use(packet); - sep.media_type = avdtp_subevent_signaling_sep_found_get_media_type(packet); - sep.type = avdtp_subevent_signaling_sep_found_get_sep_type(packet); - printf("Found sep: seid %u, in_use %d, media type %d, sep type %d (1-SNK)\n", sep.seid, sep.in_use, sep.media_type, sep.type); - break; - case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CAPABILITY: - app_state = AVDTP_APPLICATION_IDLE; - sbc_capability.sampling_frequency_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_sampling_frequency_bitmap(packet); - sbc_capability.channel_mode_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_channel_mode_bitmap(packet); - sbc_capability.block_length_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_block_length_bitmap(packet); - sbc_capability.subbands_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_subbands_bitmap(packet); - sbc_capability.allocation_method_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_allocation_method_bitmap(packet); - sbc_capability.min_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_capability_get_min_bitpool_value(packet); - sbc_capability.max_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_capability_get_max_bitpool_value(packet); - dump_sbc_capability(sbc_capability); - break; - case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CONFIGURATION:{ - app_state = AVDTP_APPLICATION_IDLE; - sbc_configuration.reconfigure = avdtp_subevent_signaling_media_codec_sbc_configuration_get_reconfigure(packet); - sbc_configuration.num_channels = avdtp_subevent_signaling_media_codec_sbc_configuration_get_num_channels(packet); - sbc_configuration.sampling_frequency = avdtp_subevent_signaling_media_codec_sbc_configuration_get_sampling_frequency(packet); - sbc_configuration.channel_mode = avdtp_subevent_signaling_media_codec_sbc_configuration_get_channel_mode(packet); - sbc_configuration.block_length = avdtp_subevent_signaling_media_codec_sbc_configuration_get_block_length(packet); - sbc_configuration.subbands = avdtp_subevent_signaling_media_codec_sbc_configuration_get_subbands(packet); - sbc_configuration.allocation_method = avdtp_subevent_signaling_media_codec_sbc_configuration_get_allocation_method(packet); - sbc_configuration.min_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_configuration_get_min_bitpool_value(packet); - sbc_configuration.max_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_configuration_get_max_bitpool_value(packet); - sbc_configuration.frames_per_buffer = sbc_configuration.subbands * sbc_configuration.block_length; - dump_sbc_configuration(sbc_configuration); - // // TODO: use actual config - // btstack_sbc_encoder_init(&local_stream_endpoint->sbc_encoder_state, SBC_MODE_STANDARD, 16, 8, 2, 44100, 53); - - if (sbc_configuration.reconfigure){ - close_media_processing(); - init_media_processing(sbc_configuration); - } else { - init_media_processing(sbc_configuration); - } - break; - } - case AVDTP_SUBEVENT_STREAMING_CONNECTION_ESTABLISHED: - break; - case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_OTHER_CAPABILITY: - printf(" received non SBC codec. not implemented\n"); - break; - case AVDTP_SUBEVENT_SIGNALING_ACCEPT: - app_state = AVDTP_APPLICATION_IDLE; - break; - default: - printf(" not implemented\n"); - break; - } - break; - default: - break; + uint8_t status; + + switch (packet[2]){ + case AVDTP_SUBEVENT_SIGNALING_CONNECTION_ESTABLISHED: + avdtp_cid = avdtp_subevent_signaling_connection_established_get_avdtp_cid(packet); + status = avdtp_subevent_signaling_connection_established_get_status(packet); + if (status != ERROR_CODE_SUCCESS){ + printf("AVDTP connection establishment failed: status 0x%02x.\n", status); + break; + } + printf("AVDTP connection established: avdtp_cid 0x%02x.\n", avdtp_cid); + break; + case AVDTP_SUBEVENT_SIGNALING_CONNECTION_RELEASED: + avdtp_cid = avdtp_subevent_signaling_connection_released_get_avdtp_cid(packet); + printf("AVDTP connection released: avdtp_cid 0x%02x.\n", avdtp_cid); + break; + case AVDTP_SUBEVENT_SIGNALING_SEP_FOUND: + sep.seid = avdtp_subevent_signaling_sep_found_get_remote_seid(packet); + sep.in_use = avdtp_subevent_signaling_sep_found_get_in_use(packet); + sep.media_type = avdtp_subevent_signaling_sep_found_get_media_type(packet); + sep.type = avdtp_subevent_signaling_sep_found_get_sep_type(packet); + printf("Found sep: seid %u, in_use %d, media type %d, sep type %d (1-SNK)\n", sep.seid, sep.in_use, sep.media_type, sep.type); + break; + case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CAPABILITY: + printf("Received MEDIA_CODEC_SBC_CAPABILITY\n"); + sbc_capability.sampling_frequency_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_sampling_frequency_bitmap(packet); + sbc_capability.channel_mode_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_channel_mode_bitmap(packet); + sbc_capability.block_length_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_block_length_bitmap(packet); + sbc_capability.subbands_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_subbands_bitmap(packet); + sbc_capability.allocation_method_bitmap = avdtp_subevent_signaling_media_codec_sbc_capability_get_allocation_method_bitmap(packet); + sbc_capability.min_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_capability_get_min_bitpool_value(packet); + sbc_capability.max_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_capability_get_max_bitpool_value(packet); + dump_sbc_capability(sbc_capability); + break; + case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CONFIGURATION:{ + printf("Received MEDIA_CODEC_SBC_CONFIGURATION\n"); + sbc_configuration.reconfigure = avdtp_subevent_signaling_media_codec_sbc_configuration_get_reconfigure(packet); + sbc_configuration.num_channels = avdtp_subevent_signaling_media_codec_sbc_configuration_get_num_channels(packet); + sbc_configuration.sampling_frequency = avdtp_subevent_signaling_media_codec_sbc_configuration_get_sampling_frequency(packet); + sbc_configuration.channel_mode = avdtp_subevent_signaling_media_codec_sbc_configuration_get_channel_mode(packet); + sbc_configuration.block_length = avdtp_subevent_signaling_media_codec_sbc_configuration_get_block_length(packet); + sbc_configuration.subbands = avdtp_subevent_signaling_media_codec_sbc_configuration_get_subbands(packet); + sbc_configuration.allocation_method = avdtp_subevent_signaling_media_codec_sbc_configuration_get_allocation_method(packet); + sbc_configuration.min_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_configuration_get_min_bitpool_value(packet); + sbc_configuration.max_bitpool_value = avdtp_subevent_signaling_media_codec_sbc_configuration_get_max_bitpool_value(packet); + sbc_configuration.frames_per_buffer = sbc_configuration.subbands * sbc_configuration.block_length; + dump_sbc_configuration(sbc_configuration); + + if (sbc_configuration.reconfigure){ + close_media_processing(); + init_media_processing(sbc_configuration); + } else { + init_media_processing(sbc_configuration); } break; - default: - // other packet type + } + case AVDTP_SUBEVENT_STREAMING_CONNECTION_ESTABLISHED: break; + case AVDTP_SUBEVENT_SIGNALING_MEDIA_CODEC_OTHER_CAPABILITY: + printf("Received non SBC codec, event not parsed.\n"); + break; + case AVDTP_SUBEVENT_SIGNALING_ACCEPT: + break; + default: + printf("AVDTP Sink event not parsed\n"); + break; } } @@ -528,18 +490,18 @@ static void show_usage(void){ gap_local_bd_addr(iut_address); printf("\n--- Bluetooth AVDTP SINK Test Console %s ---\n", bd_addr_to_str(iut_address)); printf("c - create connection to addr %s\n", device_addr_string); - printf("C - disconnect\n"); printf("d - discover stream endpoints\n"); printf("g - get capabilities\n"); printf("a - get all capabilities\n"); printf("s - set configuration\n"); printf("f - get configuration\n"); printf("R - reconfigure stream with %d\n", sep.seid); - printf("o - open stream with seid %d\n", sep.seid); + printf("o - establish stream with seid %d\n", sep.seid); printf("m - start stream with %d\n", sep.seid); printf("A - abort stream with %d\n", sep.seid); - printf("S - stop stream with %d\n", sep.seid); - printf("P - suspend stream with %d\n", sep.seid); + printf("P - suspend (pause) stream with %d\n", sep.seid); + printf("S - stop (release) stream with %d\n", sep.seid); + printf("C - disconnect\n"); printf("Ctrl-c - exit\n"); printf("---\n"); } @@ -548,31 +510,31 @@ static void stdin_process(char cmd){ sep.seid = 1; switch (cmd){ case 'c': - printf("Creating L2CAP Connection to %s, BLUETOOTH_PROTOCOL_AVDTP\n", device_addr_string); + printf("Establish AVDTP Sink connection to %s\n", device_addr_string); avdtp_sink_connect(device_addr, &avdtp_cid); break; case 'C': - printf("Disconnect not implemented\n"); + printf("Disconnect AVDTP Sink\n"); avdtp_sink_disconnect(avdtp_cid); break; case 'd': - app_state = AVDTP_APPLICATION_W2_DISCOVER_SEPS; + printf("Discover stream endpoints of %s\n", device_addr_string); avdtp_sink_discover_stream_endpoints(avdtp_cid); break; case 'g': - app_state = AVDTP_APPLICATION_W2_GET_CAPABILITIES; + printf("Get capabilities of stream endpoint with seid %d\n", sep.seid); avdtp_sink_get_capabilities(avdtp_cid, sep.seid); break; case 'a': - app_state = AVDTP_APPLICATION_W2_GET_ALL_CAPABILITIES; + printf("Get all capabilities of stream endpoint with seid %d\n", sep.seid); avdtp_sink_get_all_capabilities(avdtp_cid, sep.seid); break; case 'f': - app_state = AVDTP_APPLICATION_W2_GET_CONFIGURATION; + printf("Get configuration of stream endpoint with seid %d\n", sep.seid); avdtp_sink_get_configuration(avdtp_cid, sep.seid); break; case 's': - app_state = AVDTP_APPLICATION_W2_SET_CONFIGURATION; + printf("Set configuration of stream endpoint with seid %d\n", sep.seid); 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; @@ -581,7 +543,7 @@ static void stdin_process(char cmd){ avdtp_sink_set_configuration(avdtp_cid, local_stream_endpoint->sep.seid, sep.seid, remote_configuration_bitmap, remote_configuration); break; case 'R': - app_state = AVDTP_APPLICATION_W2_RECONFIGURE_WITH_SEID; + printf("Reconfigure stream endpoint with seid %d\n", sep.seid); 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; @@ -590,24 +552,23 @@ static void stdin_process(char cmd){ avdtp_sink_reconfigure(avdtp_cid, local_stream_endpoint->sep.seid, sep.seid, remote_configuration_bitmap, remote_configuration); break; case 'o': - app_state = AVDTP_APPLICATION_W2_OPEN_STREAM_WITH_SEID; + printf("Establish stream between local %d and remote %d seid\n", avdtp_local_seid(local_stream_endpoint), sep.seid); avdtp_sink_open_stream(avdtp_cid, local_stream_endpoint->sep.seid, sep.seid); break; case 'm': - printf("AVDTP_APPLICATION_W2_START_STREAM_WITH_SEID \n"); - app_state = AVDTP_APPLICATION_W2_START_STREAM_WITH_SEID; + printf("Start stream between local %d and remote %d seid\n", avdtp_local_seid(local_stream_endpoint), avdtp_remote_seid(local_stream_endpoint)); avdtp_sink_start_stream(avdtp_cid, avdtp_local_seid(local_stream_endpoint)); break; case 'A': - app_state = AVDTP_APPLICATION_W2_ABORT_STREAM_WITH_SEID; + printf("Abort stream between local %d and remote %d seid\n", avdtp_local_seid(local_stream_endpoint), avdtp_remote_seid(local_stream_endpoint)); avdtp_sink_abort_stream(avdtp_cid, avdtp_local_seid(local_stream_endpoint)); break; case 'S': - app_state = AVDTP_APPLICATION_W2_STOP_STREAM_WITH_SEID; + printf("Release stream between local %d and remote %d seid\n", avdtp_local_seid(local_stream_endpoint), avdtp_remote_seid(local_stream_endpoint)); avdtp_sink_stop_stream(avdtp_cid, avdtp_local_seid(local_stream_endpoint)); break; case 'P': - app_state = AVDTP_APPLICATION_W2_SUSPEND_STREAM_WITH_SEID; + printf("Susspend stream between local %d and remote %d seid\n", avdtp_local_seid(local_stream_endpoint), avdtp_remote_seid(local_stream_endpoint)); avdtp_sink_suspend(avdtp_cid, avdtp_local_seid(local_stream_endpoint)); break; @@ -625,7 +586,6 @@ static void stdin_process(char cmd){ int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ - UNUSED(argc); (void)argv; @@ -635,26 +595,21 @@ int btstack_main(int argc, const char * argv[]){ l2cap_init(); // Initialize AVDTP Sink - avdtp_source_init(&a2dp_sink_context); + avdtp_sink_init(&a2dp_sink_context); avdtp_sink_register_packet_handler(&packet_handler); -//#ifndef SMG_BI local_stream_endpoint = avdtp_sink_create_stream_endpoint(AVDTP_SINK, AVDTP_AUDIO); avdtp_sink_register_media_transport_category(local_stream_endpoint->sep.seid); avdtp_sink_register_media_codec_category(local_stream_endpoint->sep.seid, AVDTP_AUDIO, AVDTP_CODEC_SBC, media_sbc_codec_capabilities, sizeof(media_sbc_codec_capabilities)); -//#endif - // uint8_t cp_type_lsb, uint8_t cp_type_msb, const uint8_t * cp_type_value, uint8_t cp_type_value_len - // avdtp_sink_register_content_protection_category(seid, 2, 2, NULL, 0); avdtp_sink_register_media_handler(&handle_l2cap_media_data_packet); - printf("reistered media handler\n"); // Initialize SDP sdp_init(); memset(sdp_avdtp_sink_service_buffer, 0, sizeof(sdp_avdtp_sink_service_buffer)); a2dp_sink_create_sdp_record(sdp_avdtp_sink_service_buffer, 0x10001, 1, NULL, NULL); sdp_register_service(sdp_avdtp_sink_service_buffer); - gap_set_local_name("BTstack A2DP Sink Test"); + gap_set_local_name("BTstack A2DP Sink PTS Test"); gap_discoverable_control(1); gap_set_class_of_device(0x200408); diff --git a/test/pts/avdtp_source_test.c b/test/pts/avdtp_source_test.c index 16653ee29..229fba9c1 100644 --- a/test/pts/avdtp_source_test.c +++ b/test/pts/avdtp_source_test.c @@ -443,7 +443,7 @@ int btstack_main(int argc, const char * argv[]){ a2dp_source_create_sdp_record(sdp_avdtp_source_service_buffer, 0x10002, 1, NULL, NULL); sdp_register_service(sdp_avdtp_source_service_buffer); - gap_set_local_name("BTstack A2DP Source Test"); + gap_set_local_name("BTstack AVDTP Source PTS Test"); gap_discoverable_control(1); gap_set_class_of_device(0x200408); diff --git a/test/pts/avrcp_test.c b/test/pts/avrcp_test.c index c20a013d8..77ffe9fdb 100644 --- a/test/pts/avrcp_test.c +++ b/test/pts/avrcp_test.c @@ -535,7 +535,7 @@ int btstack_main(int argc, const char * argv[]){ avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, 1, NULL, NULL); sdp_register_service(sdp_avrcp_controller_service_buffer); - gap_set_local_name("BTstack A2DP Sink Test"); + gap_set_local_name("BTstack AVRCP PTS Test"); gap_discoverable_control(1); gap_set_class_of_device(0x200408);