core/bluetooth: stop discovery once the dive computer has been found

There is no need to continue to look, and at least with the Shearwater
Peregrine having the scan run while we are trying to discover characteristics
appeared to cause issues.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2020-08-21 15:42:39 -07:00
parent ba3efae6e8
commit c87e028602
2 changed files with 15 additions and 2 deletions

View file

@ -404,6 +404,14 @@ void BTDiscovery::discoverAddress(QString address)
}
}
void BTDiscovery::stopAgent()
{
if (!discoveryAgent)
return;
qDebug() << "---> stopping the discovery agent";
discoveryAgent->stop();
}
bool isBluetoothAddress(const QString &address)
{
return extractBluetoothAddress(address) != QString();
@ -442,8 +450,10 @@ void saveBtDeviceInfo(const QString &devaddr, QBluetoothDeviceInfo deviceInfo)
QBluetoothDeviceInfo getBtDeviceInfo(const QString &devaddr)
{
if (btDeviceInfo.contains(devaddr))
if (btDeviceInfo.contains(devaddr)) {
BTDiscovery::instance()->stopAgent();
return btDeviceInfo[devaddr];
}
if(!btDeviceInfo.keys().contains(devaddr)) {
qDebug() << "still looking scan is still running, we should just wait for a few moments";
// wait for a maximum of 30 more seconds
@ -451,8 +461,10 @@ QBluetoothDeviceInfo getBtDeviceInfo(const QString &devaddr)
QElapsedTimer timer;
timer.start();
do {
if (btDeviceInfo.keys().contains(devaddr))
if (btDeviceInfo.keys().contains(devaddr)) {
BTDiscovery::instance()->stopAgent();
return btDeviceInfo[devaddr];
}
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
QThread::msleep(100);
} while (timer.elapsed() < 30000);

View file

@ -47,6 +47,7 @@ public:
void btDeviceDiscoveredMain(const btPairedDevice &device);
bool btAvailable() const;
void showNonDiveComputers(bool show);
void stopAgent();
#if defined(Q_OS_ANDROID)
void getBluetoothDevices();