public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
* [Bluez-devel] Small bugfix for hstest
@ 2004-08-30 15:53 Till Harbaum
  2004-08-30 16:07 ` Marcel Holtmann
  0 siblings, 1 reply; 2+ messages in thread
From: Till Harbaum @ 2004-08-30 15:53 UTC (permalink / raw)
  To: bluez-devel

[-- Attachment #1: Type: text/plain, Size: 1072 bytes --]

Hi,

i have played around with hstest and some uart based hardware and found a 
problem, that only seems to happen with uart based devices:

A client may receive sco data packets that are bigger than the sco mtu. hstest 
returns packets of exactly the same size of the packets it received. If the 
packet received is bigger then the sco mtu, then packets bigger than sco mtu 
are being sent and being dropped in the kernel. As a result, no data is being 
sent at all. Instead multiple smaller sco packets should be sent.

The attached patch has to be applied to bluez-utils/test/hstest.c and fixes 
the problem inside hstest. It would as well be possible to make the kernel 
sco code detect this and fragment the payload accordingly. But imho this 
should be done in the application.

Regards,
  Till

-- 
Dr.-Ing. Till Harbaum                       Tel.:  +49 721 4998963
BeeCon GmbH                                 Fax:   +49 721 4998962
Haid-und-Neu Strasse 7, 76131 Karlsruhe     Mobil: +49 179 9087904
harbaum@beecon.de                           http://www.beecon.de

[-- Attachment #2: hstest-uart.patch --]
[-- Type: text/x-diff, Size: 691 bytes --]

--- hstest.c.old	2004-08-28 13:11:11.000000000 +0200
+++ hstest.c	2004-08-28 13:14:45.000000000 +0200
@@ -148,7 +148,7 @@
 
 	fd_set rfds;
 	struct timeval timeout;
-	unsigned char buf[2048];
+	unsigned char buf[2048], *p;
 	int maxfd, sel, rlen, wlen;
 
 	bdaddr_t local;
@@ -274,7 +274,15 @@
 					switch (mode) {
 					case PLAY:
 						rlen = read(fd, buf, rlen);
-						wlen = write(sd, buf, rlen);
+
+						wlen = 0; 
+						p = buf;
+						while(rlen > sco_mtu) {
+						        wlen += write(sd, p, sco_mtu);
+						        rlen -= sco_mtu;
+						        p += sco_mtu;
+						}
+						wlen += write(sd, p, rlen);
 						break;
 					case RECORD:
 						wlen = write(fd, buf, rlen);

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-08-30 16:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-30 15:53 [Bluez-devel] Small bugfix for hstest Till Harbaum
2004-08-30 16:07 ` Marcel Holtmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox