Return-Path: MIME-Version: 1.0 In-Reply-To: <1434707473-16294-1-git-send-email-bharat.panda@samsung.com> References: <1434707473-16294-1-git-send-email-bharat.panda@samsung.com> Date: Tue, 23 Jun 2015 11:37:38 +0300 Message-ID: Subject: Re: [PATCH ] audio/avrcp: Handle "Available Players Changed" From: Luiz Augusto von Dentz To: Bharat Panda Cc: "linux-bluetooth@vger.kernel.org" , cpgs@samsung.com Content-Type: text/plain; charset=UTF-8 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi Bharat, On Fri, Jun 19, 2015 at 12:51 PM, Bharat Panda wrote: > Add support for AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED notification. > > - Register notification for "Avalable Players Changed" > - Send interim and final response on change in available players. > As per AVRCP 1.5 specification, > The interim and final responses of available players changed > notification shall not contain any parameters. > --- > profiles/audio/avrcp.c | 7 +++++++ > profiles/audio/media.c | 6 ++++++ > 2 files changed, 13 insertions(+) > > diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c > index 60f8cbf..b22f2fe 100644 > --- a/profiles/audio/avrcp.c > +++ b/profiles/audio/avrcp.c > @@ -673,6 +673,9 @@ void avrcp_player_event(struct avrcp_player *player, uint8_t id, > pdu->params[size++] = attr; > pdu->params[size++] = val; > break; > + case AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED: > + size = 1; > + break; > default: > error("Unknown event %u", id); > return; > @@ -1490,6 +1493,9 @@ static uint8_t avrcp_handle_register_notification(struct avrcp *session, > } > > break; > + case AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED: > + len = 1; > + break; > case AVRCP_EVENT_VOLUME_CHANGED: > pdu->params[1] = media_transport_get_device_volume(dev); > if (pdu->params[1] > 127) > @@ -3435,6 +3441,7 @@ static void target_init(struct avrcp *session) > (1 << AVRCP_EVENT_TRACK_CHANGED) | > (1 << AVRCP_EVENT_TRACK_REACHED_START) | > (1 << AVRCP_EVENT_TRACK_REACHED_END) | > + (1 << AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED) | > (1 << AVRCP_EVENT_SETTINGS_CHANGED); > > if (target->version < 0x0104) > diff --git a/profiles/audio/media.c b/profiles/audio/media.c > index f12569e..8150948 100644 > --- a/profiles/audio/media.c > +++ b/profiles/audio/media.c > @@ -987,6 +987,9 @@ static void media_player_remove(struct media_player *mp) > { > info("Player unregistered: sender=%s path=%s", mp->sender, mp->path); > > + avrcp_player_event(mp->player, > + AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED, NULL); > + > media_player_destroy(mp); > } > > @@ -1793,6 +1796,9 @@ static DBusMessage *register_player(DBusConnection *conn, DBusMessage *msg, > return btd_error_invalid_args(msg); > } > > + avrcp_player_event(mp->player, > + AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED, NULL); > + > if (parse_player_properties(mp, &args) == FALSE) { > media_player_destroy(mp); > return btd_error_invalid_args(msg); I guess the event should be sent only after we parse player the properties otherwise you will send multiple event in a row, but perhaps we can make avrcp_register_player to handle this internally in that case I would use g_idle_add and in case it gets destroyed abort the event. -- Luiz Augusto von Dentz