From 65cfccf1b10fed9ee5e3c807ccd4663f3f778f01 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 5 Feb 2014 12:26:58 +0200 Subject: [PATCH] android/AVRCP: Add bt_avrcp_disconnect This adds bt_avrcp_disconnect function which can be used to disconnect AVRCP sessions. --- android/avrcp.c | 26 ++++++++++++++++++++++++++ android/avrcp.h | 1 + 2 files changed, 27 insertions(+) diff --git a/android/avrcp.c b/android/avrcp.c index 8600d9885..f61ed341c 100644 --- a/android/avrcp.c +++ b/android/avrcp.c @@ -135,6 +135,11 @@ static void avrcp_device_free(void *data) if (dev->session) avctp_shutdown(dev->session); + if (dev->io) { + g_io_channel_shutdown(dev->io, FALSE, NULL); + g_io_channel_unref(dev->io); + } + devices = g_slist_remove(devices, dev); g_free(dev); } @@ -338,3 +343,24 @@ void bt_avrcp_connect(const bdaddr_t *dst) ba2str(&dev->dst, addr); DBG("connecting to %s", addr); } + +void bt_avrcp_disconnect(const bdaddr_t *dst) +{ + struct avrcp_device *dev; + GSList *l; + + DBG(""); + + l = g_slist_find_custom(devices, dst, device_cmp); + if (!l) + return; + + dev = l->data; + + if (dev->session) { + avctp_shutdown(dev->session); + return; + } + + avrcp_device_free(dev); +} diff --git a/android/avrcp.h b/android/avrcp.h index 7b0a5ede1..4ad49e6bd 100644 --- a/android/avrcp.h +++ b/android/avrcp.h @@ -25,3 +25,4 @@ bool bt_avrcp_register(const bdaddr_t *addr); void bt_avrcp_unregister(void); void bt_avrcp_connect(const bdaddr_t *dst); +void bt_avrcp_disconnect(const bdaddr_t *dst); -- 2.47.3