diff --git a/src/classic/avdtp.c b/src/classic/avdtp.c index d5671e80e..267b45c36 100644 --- a/src/classic/avdtp.c +++ b/src/classic/avdtp.c @@ -131,6 +131,21 @@ void avdtp_streaming_emit_can_send_media_packet_now(avdtp_stream_endpoint_t *str (*packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event)); } + +void avdtp_signaling_emit_delay(uint16_t avdtp_cid, uint8_t local_seid, uint16_t delay) { + uint8_t event[8]; + int pos = 0; + event[pos++] = HCI_EVENT_AVDTP_META; + event[pos++] = sizeof(event) - 2; + event[pos++] = AVDTP_SUBEVENT_SIGNALING_DELAY_REPORT; + little_endian_store_16(event, pos, avdtp_cid); + pos += 2; + event[pos++] = local_seid; + little_endian_store_16(event, pos, delay); + pos += 2; + (*avdtp_source_callback)(HCI_EVENT_PACKET, 0, event, sizeof(event)); +} + btstack_linked_list_t * avdtp_get_stream_endpoints(void){ return &stream_endpoints; } diff --git a/src/classic/avdtp.h b/src/classic/avdtp.h index 3b61c9fae..b2fbac5d3 100644 --- a/src/classic/avdtp.h +++ b/src/classic/avdtp.h @@ -607,6 +607,7 @@ uint8_t avdtp_choose_sbc_min_bitpool_value(avdtp_stream_endpoint_t * stream_endp uint8_t avdtp_stream_endpoint_seid(avdtp_stream_endpoint_t * stream_endpoint); void avdtp_streaming_emit_can_send_media_packet_now(avdtp_stream_endpoint_t *stream_endpoint, uint16_t sequence_number); +void avdtp_signaling_emit_delay(uint16_t avdtp_cid, uint8_t local_seid, uint16_t delay); uint8_t is_avdtp_remote_seid_registered(avdtp_stream_endpoint_t * stream_endpoint); diff --git a/src/classic/avdtp_acceptor.c b/src/classic/avdtp_acceptor.c index 3179dc82a..941675a97 100644 --- a/src/classic/avdtp_acceptor.c +++ b/src/classic/avdtp_acceptor.c @@ -131,7 +131,7 @@ static void avdtp_acceptor_handle_configuration_command(avdtp_connection_t *conn } void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t * packet, uint16_t size, int offset, avdtp_context_t * context){ - avdtp_stream_endpoint_t * stream_endpoint; + avdtp_stream_endpoint_t * stream_endpoint = NULL; connection->acceptor_transaction_label = connection->acceptor_signaling_packet.transaction_label; if (!avdtp_acceptor_validate_msg_length(connection->acceptor_signaling_packet.signal_identifier, size)) { connection->error_code = BAD_LENGTH; @@ -223,9 +223,7 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t return; } - if (!stream_endpoint) { - return; - } + btstack_assert(stream_endpoint != NULL); if (!avdtp_acceptor_process_chunk(&connection->acceptor_signaling_packet, packet, size)) return; @@ -239,7 +237,8 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t case AVDTP_SI_DELAYREPORT: log_info("ACP: AVDTP_ACCEPTOR_W2_ANSWER_DELAY_REPORT, local seid %d", connection->acceptor_local_seid); stream_endpoint->acceptor_config_state = AVDTP_ACCEPTOR_W2_ANSWER_DELAY_REPORT; - avdtp_signaling_emit_delay(context->avdtp_callback, connection->avdtp_cid, connection->acceptor_local_seid, big_endian_read_16(packet, offset)); + avdtp_signaling_emit_delay(connection->avdtp_cid, connection->acceptor_local_seid, + big_endian_read_16(packet, offset)); break; case AVDTP_SI_GET_ALL_CAPABILITIES: diff --git a/src/classic/avdtp_initiator.c b/src/classic/avdtp_initiator.c index 2f81a324e..cc1f42c5e 100644 --- a/src/classic/avdtp_initiator.c +++ b/src/classic/avdtp_initiator.c @@ -137,7 +137,8 @@ void avdtp_initiator_stream_config_subsm(avdtp_connection_t * connection, uint8_ avdtp_emit_capabilities(context->avdtp_callback, connection->avdtp_cid, connection->initiator_local_seid, connection->initiator_remote_seid, &sep.capabilities, sep.registered_service_categories); break; case AVDTP_SI_DELAYREPORT: - avdtp_signaling_emit_delay(context->avdtp_callback, connection->avdtp_cid, connection->initiator_local_seid, little_endian_read_16(packet, offset)); + avdtp_signaling_emit_delay(connection->avdtp_cid, connection->initiator_local_seid, + little_endian_read_16(packet, offset)); break; case AVDTP_SI_GET_CONFIGURATION: // sep.configured_service_categories = avdtp_unpack_service_capabilities(connection, &sep.configuration, packet+offset, size-offset); diff --git a/src/classic/avdtp_util.c b/src/classic/avdtp_util.c index d57bd48c2..3a909f38d 100644 --- a/src/classic/avdtp_util.c +++ b/src/classic/avdtp_util.c @@ -493,21 +493,6 @@ void avdtp_signaling_emit_sep_done(btstack_packet_handler_t callback, uint16_t a (*callback)(HCI_EVENT_PACKET, 0, event, sizeof(event)); } -void avdtp_signaling_emit_delay(btstack_packet_handler_t callback, uint16_t avdtp_cid, uint8_t local_seid, uint16_t delay){ - btstack_assert(callback != NULL); - uint8_t event[8]; - int pos = 0; - event[pos++] = HCI_EVENT_AVDTP_META; - event[pos++] = sizeof(event) - 2; - event[pos++] = AVDTP_SUBEVENT_SIGNALING_DELAY_REPORT; - little_endian_store_16(event, pos, avdtp_cid); - pos += 2; - event[pos++] = local_seid; - little_endian_store_16(event, pos, delay); - pos += 2; - (*callback)(HCI_EVENT_PACKET, 0, event, sizeof(event)); -} - void avdtp_signaling_emit_accept(btstack_packet_handler_t callback, uint16_t avdtp_cid, uint8_t local_seid, avdtp_signal_identifier_t identifier, bool is_initiator){ btstack_assert(callback != NULL); uint8_t event[8]; diff --git a/src/classic/avdtp_util.h b/src/classic/avdtp_util.h index 6c38b9d81..90a648394 100644 --- a/src/classic/avdtp_util.h +++ b/src/classic/avdtp_util.h @@ -75,7 +75,6 @@ void avdtp_signaling_emit_connection_released(btstack_packet_handler_t callback, void avdtp_signaling_emit_sep(btstack_packet_handler_t callback, uint16_t avdtp_cid, avdtp_sep_t sep); void avdtp_signaling_emit_sep_done(btstack_packet_handler_t callback, uint16_t avdtp_cid); -void avdtp_signaling_emit_delay(btstack_packet_handler_t callback, uint16_t avdtp_cid, uint8_t local_seid, uint16_t delay); void avdtp_signaling_emit_accept(btstack_packet_handler_t callback, uint16_t avdtp_cid, uint8_t seid, avdtp_signal_identifier_t identifier, bool is_initiator); void avdtp_signaling_emit_general_reject(btstack_packet_handler_t callback, uint16_t avdtp_cid, uint8_t int_seid, avdtp_signal_identifier_t identifier, bool is_initiator);