From 133becec4558cc3d2ed62147d4472aad9be57dbb Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Wed, 30 Aug 2017 11:48:59 +0200 Subject: [PATCH] a2dp: send STOP event on stream stopped or aborted --- src/btstack_defines.h | 18 +++++++++++++----- src/btstack_event.h | 19 +++++++++++++++++++ src/classic/a2dp_sink.c | 2 +- src/classic/a2dp_sink.h | 1 + src/classic/a2dp_source.c | 2 +- src/classic/a2dp_source.h | 1 + 6 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/btstack_defines.h b/src/btstack_defines.h index a5425c9e4..5c863e6ba 100644 --- a/src/btstack_defines.h +++ b/src/btstack_defines.h @@ -1496,13 +1496,21 @@ typedef uint8_t sm_key_t[16]; */ #define A2DP_SUBEVENT_STREAM_SUSPENDED 0x06 +/** + * @format 121 Stream is stoped or aborted. + * @param subevent_code + * @param a2dp_cid + * @param local_seid + */ +#define A2DP_SUBEVENT_STREAM_STOPPED 0x07 + /** * @format 121 Stream is released. * @param subevent_code * @param a2dp_cid * @param local_seid */ -#define A2DP_SUBEVENT_STREAM_RELEASED 0x07 +#define A2DP_SUBEVENT_STREAM_RELEASED 0x08 /** * @format 1211 @@ -1511,7 +1519,7 @@ typedef uint8_t sm_key_t[16]; * @param local_seid * @param signal_identifier */ -#define A2DP_SUBEVENT_COMMAND_ACCEPTED 0x08 +#define A2DP_SUBEVENT_COMMAND_ACCEPTED 0x09 /** * @format 1211 @@ -1520,7 +1528,7 @@ typedef uint8_t sm_key_t[16]; * @param local_seid * @param signal_identifier */ -#define A2DP_SUBEVENT_COMMAND_REJECTED 0x09 +#define A2DP_SUBEVENT_COMMAND_REJECTED 0x0A /** * @format 12B Signaling channel is opened. @@ -1528,14 +1536,14 @@ typedef uint8_t sm_key_t[16]; * @param a2dp_cid * @param bd_addr */ -#define A2DP_SUBEVENT_INCOMING_CONNECTION_ESTABLISHED 0x0A +#define A2DP_SUBEVENT_INCOMING_CONNECTION_ESTABLISHED 0x0B /** * @format 12 Signaling channel is released. * @param subevent_code * @param a2dp_cid */ -#define A2DP_SUBEVENT_SIGNALING_CONNECTION_RELEASED 0x0B +#define A2DP_SUBEVENT_SIGNALING_CONNECTION_RELEASED 0x0C /** AVRCP Subevent */ diff --git a/src/btstack_event.h b/src/btstack_event.h index 2e98f1b47..7e7f81ab4 100644 --- a/src/btstack_event.h +++ b/src/btstack_event.h @@ -4880,6 +4880,25 @@ static inline uint8_t a2dp_subevent_stream_suspended_get_local_seid(const uint8_ return event[5]; } +/** + * @brief Get field a2dp_cid from event A2DP_SUBEVENT_STREAM_STOPPED + * @param event packet + * @return a2dp_cid + * @note: btstack_type 2 + */ +static inline uint16_t a2dp_subevent_stream_stopped_get_a2dp_cid(const uint8_t * event){ + return little_endian_read_16(event, 3); +} +/** + * @brief Get field local_seid from event A2DP_SUBEVENT_STREAM_STOPPED + * @param event packet + * @return local_seid + * @note: btstack_type 1 + */ +static inline uint8_t a2dp_subevent_stream_stopped_get_local_seid(const uint8_t * event){ + return event[5]; +} + /** * @brief Get field a2dp_cid from event A2DP_SUBEVENT_STREAM_RELEASED * @param event packet diff --git a/src/classic/a2dp_sink.c b/src/classic/a2dp_sink.c index db3b1e8cb..5f9e7a80a 100644 --- a/src/classic/a2dp_sink.c +++ b/src/classic/a2dp_sink.c @@ -314,7 +314,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe break; case AVDTP_SI_ABORT: case AVDTP_SI_CLOSE: - a2dp_emit_stream_event(a2dp_sink_context.a2dp_callback, cid, A2DP_SUBEVENT_STREAM_RELEASED, loc_seid); + a2dp_emit_stream_event(a2dp_sink_context.a2dp_callback, cid, A2DP_SUBEVENT_STREAM_STOPPED, loc_seid); break; default: // a2dp_emit_cmd_accepted(a2dp_sink_context.a2dp_callback, packet, size); diff --git a/src/classic/a2dp_sink.h b/src/classic/a2dp_sink.h index de2828c71..a753daa10 100644 --- a/src/classic/a2dp_sink.h +++ b/src/classic/a2dp_sink.h @@ -92,6 +92,7 @@ uint8_t a2dp_sink_create_stream_endpoint(avdtp_media_type_t media_type, avdtp_me * - A2DP_SUBEVENT_STREAM_ESTABLISHED: received when stream to a remote device is established * - A2DP_SUBEVENT_STREAM_STARTED: received when stream is started * - A2DP_SUBEVENT_STREAM_SUSPENDED: received when stream is paused + * - A2DP_SUBEVENT_STREAM_STOPED: received when stream is aborted or stopped * - A2DP_SUBEVENT_STREAM_RELEASED: received when stream is released * - A2DP_SUBEVENT_SIGNALING_CONNECTION_RELEASED: received when signaling channel is disconnected * diff --git a/src/classic/a2dp_source.c b/src/classic/a2dp_source.c index 9197616dd..46e61a47d 100644 --- a/src/classic/a2dp_source.c +++ b/src/classic/a2dp_source.c @@ -350,7 +350,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe int pos = 0; event[pos++] = HCI_EVENT_A2DP_META; event[pos++] = sizeof(event) - 2; - event[pos++] = A2DP_SUBEVENT_STREAM_RELEASED; + event[pos++] = A2DP_SUBEVENT_STREAM_STOPPED; little_endian_store_16(event, pos, cid); pos += 2; log_info("send A2DP_SUBEVENT_STREAM_RELEASED to app"); diff --git a/src/classic/a2dp_source.h b/src/classic/a2dp_source.h index 31d8393d3..7dcdd71ce 100644 --- a/src/classic/a2dp_source.h +++ b/src/classic/a2dp_source.h @@ -92,6 +92,7 @@ avdtp_stream_endpoint_t * a2dp_source_create_stream_endpoint(avdtp_media_type_t * - A2DP_SUBEVENT_STREAM_ESTABLISHED: Received when stream to a remote device is established. * - A2DP_SUBEVENT_STREAM_STARTED: Received when stream is started. * - A2DP_SUBEVENT_STREAM_SUSPENDED: Received when stream is paused. + * - A2DP_SUBEVENT_STREAM_STOPED: received when stream is aborted or stopped. * - A2DP_SUBEVENT_STREAM_RELEASED: Received when stream is released. * - A2DP_SUBEVENT_STREAMING_CAN_SEND_MEDIA_PACKET_NOW: Indicates that the next media packet can be sent. *