[TEST REQUEST] Windows Bluetooth LE build

Lubomir I. Ivanov neolit123 at gmail.com
Sat Sep 29 15:41:42 PDT 2018


On Sun, 30 Sep 2018 at 01:14, Dirk Hohndel <dirk at hohndel.org> wrote:
>
>
> > On Sep 29, 2018, at 3:07 PM, Lubomir I. Ivanov <neolit123 at gmail.com> wrote:
> >
> >>
> >> Interestingly enough, the two BLE dive computers I tried with are
> >> both Shearwaters who AFAIK require random addresses. I don't
> >> see, however, how that would cause the error pairing.
> >>
> >> The third one (Suunto EON Steel) I couldn't figure out how to even
> >> pair with Windows 10...
> >>
> >> Still trying to figure out how to get the logging to work...
> >>
> >
> >
> > Dirk notice that Steve is being able to discover the device, but then
> > fails to connect:
> > (screenshot).
> >
> > from what i've understood on your end it fails finding the device in
> > the list of BT(LE) devices nearby, so it fails in an earlier step?
> >
>
> But Steve has a Petrel 2, right? And AFAIK the Petrel 2 will ALWAYS
> switch to BT Classic if the computer supports that. So even though it
> includes a BLE radio, that only seems to actually work when you connect
> BLE only. And reading the sources I don't think that's what we do. We
> seem to scan both at the same time.
>
> Actually, this is a part of the sources that REALLY puzzles me...
>
>     threadLE = new QThread;
>     threadWorkerLE = new ThreadWorkerDeviceDiscovery;
>     threadWorkerLE->moveToThread(threadLE);
>     connect(threadWorkerLE, &ThreadWorkerDeviceDiscovery::discoveryCompleted, this, &QBluetoothDeviceDiscoveryAgentPrivate::completeLeDevicesDiscovery);
>     connect(threadLE, &QThread::finished, threadWorkerLE, &ThreadWorkerDeviceDiscovery::deleteLater);
>     connect(threadLE, &QThread::finished, threadLE, &QThread::deleteLater);
>     threadLE->start();
>
>     threadClassic = new QThread;
>     threadWorkerClassic = new ThreadWorkerDeviceDiscovery;
>     threadWorkerClassic->moveToThread(threadClassic);
>     connect(threadWorkerClassic, &ThreadWorkerDeviceDiscovery::discoveryCompleted, this, &QBluetoothDeviceDiscoveryAgentPrivate::completeClassicDevicesDiscovery);
>     connect(threadClassic, &QThread::finished, threadWorkerClassic, &ThreadWorkerDeviceDiscovery::deleteLater);
>     connect(threadClassic, &QThread::finished, threadClassic, &QThread::deleteLater);
>     threadClassic->start();
>
> So this creates to ThreadWorkerDeviceDiscovery objects. How does the LE one know to scan for BLE only, and the Classic one to scan for Classic only?
> I must be missing something obvious - but this just confuses me.
>

the BTLE and BT-classic in the Windows API have different discovery methods.
while i contributed parts of the above code, the separable discovery
was already in place.

also the above code hasn't seen a lot of testing.

but i don't think we are using QBluetoothDeviceDiscoveryAgent in our
code on Windows, is that correct?

looking at this i cannot figure out how the discovery on WIndows is happening:
https://github.com/Subsurface-divelog/subsurface/blob/master/core/btdiscovery.cpp#L101

lubomir
--


More information about the subsurface mailing list