Skip to contentSkip to conversation

alsa plugin disconnection

PATCH In review Frédéric Dalleau 2 participants 3 messages Mar 3, 2008 – Mar 4, 2008 Bluetooth drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 alsa plugin disconnection

Hi,

This patch will allow alsa plugin to detect disconnection of devices and return error to applications.
Not all applications will handle this error, but at least it is available.

Comments are welcome.

Frederic

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

#1 lore raw

updated patch.

Quoted 10 lines · Frédéric Dalleau

Hi,

This patch will allow alsa plugin to detect disconnection of devices and return error to applications. Not all applications will handle this error, but at least it is available.

Comments are welcome.

Frederic

Quoted 9 lines

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

audio/pcm_bluetooth.c +19 -4
index 2282b2e..1355066 100644
@@ -750,6 +750,11 @@ static int bluetooth_poll_revents(snd_pcm_ioplug_t *io ATTRIBUTE_UNUSED,
 	return 0;
 }
 
+static int bluetooth_playback_poll_descriptors_count(snd_pcm_ioplug_t *io)
+{
+	return 2;
+}
+
 static int bluetooth_playback_poll_descriptors(snd_pcm_ioplug_t *io,
 					struct pollfd *pfd, unsigned int space)
 {
@@ -759,14 +764,17 @@ static int bluetooth_playback_poll_descriptors(snd_pcm_ioplug_t *io,
 
 	assert(data->pipefd[0] >= 0);
 
-	if (space < 1)
+	if (space < 2)
 		return 0;
 
 	pfd[0].fd = data->pipefd[0];
 	pfd[0].events = POLLIN;
 	pfd[0].revents = 0;
+	pfd[1].fd = data->stream.fd;
+	pfd[1].events = POLLERR | POLLHUP | POLLNVAL;
+	pfd[1].revents = 0;
 
-	return 1;
+	return 2;
 }
 
 static int bluetooth_playback_poll_revents(snd_pcm_ioplug_t *io,
@@ -779,14 +787,19 @@ static int bluetooth_playback_poll_revents(snd_pcm_ioplug_t *io,
 	DBG("");
 
 	assert(pfds);
-	assert(nfds == 1);
+	assert(nfds == 2);
 	assert(revents);
 	assert(pfds[0].fd >= 0);
+	assert(pfds[1].fd >= 0);
 
 	if (io->state != SND_PCM_STATE_PREPARED)
 		ret = read(pfds[0].fd, buf, 1);
 
-	*revents = (pfds[0].revents & ~POLLIN) | POLLOUT;
+	if (pfds[1].revents & (POLLERR | POLLHUP | POLLNVAL))
+		io->state = SND_PCM_STATE_DISCONNECTED;
+
+	revents[0] = (pfds[0].revents & ~POLLIN) | POLLOUT;
+	revents[1] = (pfds[1].revents & ~POLLIN);
 
 	return 0;
 }
@@ -1087,6 +1100,7 @@ static snd_pcm_ioplug_callback_t bluetooth_hsp_playback = {
 	.hw_params		= bluetooth_hsp_hw_params,
 	.prepare		= bluetooth_prepare,
 	.transfer		= bluetooth_hsp_write,
+	.poll_descriptors_count	= bluetooth_playback_poll_descriptors_count,
 	.poll_descriptors	= bluetooth_playback_poll_descriptors,
 	.poll_revents		= bluetooth_playback_poll_revents,
 	.delay			= bluetooth_playback_delay,
@@ -1112,6 +1126,7 @@ static snd_pcm_ioplug_callback_t bluetooth_a2dp_playback = {
 	.hw_params		= bluetooth_a2dp_hw_params,
 	.prepare		= bluetooth_prepare,
 	.transfer		= bluetooth_a2dp_write,
+	.poll_descriptors_count	= bluetooth_playback_poll_descriptors_count,
 	.poll_descriptors	= bluetooth_playback_poll_descriptors,
 	.poll_revents		= bluetooth_playback_poll_revents,
 	.delay			= bluetooth_playback_delay,

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

#2 lore raw

Committed, even though rhythmbox (alsasink) seems to not handle the disconnect properly.

Quoted 9 lines · On Mon, Mar 3, 2008 at 3:09 PM, Fr=E9d=E9ric Dalleau…

updated patch.

Quoted 3 lines · Fr=E9d=E9ric Dalleau wrote:

Hi,

This patch will allow alsa plugin to detect disconnection of devices a=

nd

Quoted 2 lines
Quoted 2 lines

return error to applications.
Not all applications will handle this error, but at least it is availa=

ble.

Quoted 7 lines
Quoted 7 lines

Comments are welcome.

Frederic

----------------------------------------------------------------------=

---

Quoted 10 lines
Quoted 8 lines

This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

Quoted 10 lines

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

-- =

Luiz Augusto von Dentz
Engenheiro de Computa=E7=E3o

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel