summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2018-09-25 20:06:05 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-12 08:22:44 -0700
commit497c1248d4672524fc17e012f0fd3d4cb5137c8e (patch)
tree67d748476632995678074533f14bf92c5e092662 /core
parent9491c96103d7be26e3a98245a345adcb9230c035 (diff)
downloadsubsurface-497c1248d4672524fc17e012f0fd3d4cb5137c8e.tar.gz
Bluetooth: wait until we actually have device info
On macOS, we cannot connect to a BT/BLE device until we have scanned it. Right now this just sits quietly and waits, which given how long this can take is rather unsatisfying and might look like Subsurface is hung. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'core')
-rw-r--r--core/btdiscovery.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/core/btdiscovery.cpp b/core/btdiscovery.cpp
index c3f6c9b36..0bacbadda 100644
--- a/core/btdiscovery.cpp
+++ b/core/btdiscovery.cpp
@@ -7,6 +7,8 @@
#include <QDebug>
#include <QLoggingCategory>
#include <QRegularExpression>
+#include <QElapsedTimer>
+#include <QCoreApplication>
extern QMap<QString, dc_descriptor_t *> descriptorLookup;
@@ -326,7 +328,20 @@ QBluetoothDeviceInfo getBtDeviceInfo(const QString &devaddr)
{
if (btDeviceInfo.contains(devaddr))
return btDeviceInfo[devaddr];
- qDebug() << "need to scan for" << 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
+ // yes, that seems crazy, but on my Mac I see this take more than 20 seconds
+ QElapsedTimer timer;
+ timer.start();
+ do {
+ if (btDeviceInfo.keys().contains(devaddr))
+ return btDeviceInfo[devaddr];
+ QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
+ QThread::msleep(100);
+ } while (timer.elapsed() < 30000);
+ }
+ qDebug() << "notify user that we can't find" << devaddr;
return QBluetoothDeviceInfo();
}
#endif // BT_SUPPORT