On 29 September, 2015 - Thiago Macieira wrote:

> On Tuesday 29 September 2015 21:12:55 Anton Lundin wrote:
> > This adds the QIODevice::Unbuffered flag to our rfcomm connections to
> > bypass the buffering layer in QIODevice.
> > 
> > This fixes so firmware upgrades work against the OSTC Sport.
> 
> Both patches look good.
> 
> The unbuffered mode should not have made a difference. If it does, it's 
> probably 
> a bug somewhere (the firmware receiving the update or QtBluetooth).
> 

While playing around with this i tried all kinds of different tricks.

One that mostly worked was in qt_serial_write having a block that
looked something like:
if (device->socket->bytesToWrite() > 0) {
        QEventLoop loop;
        QTimer timer;
        ...
        timer.start(device->timeout * 4); // 4 is the magic number
        ...
}

Another one was spraying qDebug() << QByteArray((char *) data ....) in
lots of places.


Another one was :

-               rc = device->socket->write((char *) data + nbytes, size - 
nbytes);
+               rc = device->socket->write((char *) data + nbytes, size - 
nbytes > 16 ? 16 : size - nbytes);


All tree made things better to various degrees, but unbuffered made it
100%

All tests where made on 15.04 and different 4.2/4.3 rc kernels. I even
rebooted into the ubuntu 3.19.0-28-generic kernel to verify that there
were no wierdness in my kernel either.

Bluez 4.101-0ubuntu25 and Qt 5.5.0 binaries from qt.io.


//Anton


-- 
Anton Lundin    +46702-161604
_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to