On domingo, 25 de setembro de 2016 12:47:23 PDT Dirk Hohndel wrote:
> So we now have a few reports that this isn’t working anymore…
> I can reproduce things here but have no clue how to fix it.
>
> First I get this error
>
> QObject::connect: Cannot queue arguments of type 'QBluetoothServiceInfo'
> (Make sure 'QBluetoothServiceInfo' is registered using qRegisterMetaType().)
I remember seeing this elsewhere. It might be a Qt bug.
> which appears to be caused by this code in qtserialbluetooth:
>
> #elif defined(Q_OS_ANDROID) || (QT_VERSION >= 0x050500 && defined(Q_OS_MAC))
> // Try to connect to the device using the uuid of the Serial Port Profile
> service QBluetoothAddress remoteDeviceAddress(devaddr);
> serial_port->socket->connectToService(remoteDeviceAddress,
> QBluetoothUuid(QBluetoothUuid::SerialPort));
> timer.start(msec);
> loop.exec();
There's no QBluetoothServiceInfo in there. The only reference in the source
code is
serial_port->socket = new
QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
I don't remember the Bluetooth code implementation anymore (even though I
mentored the student who wrote it). Is the code in qtserialbluetooth.cpp
running in an auxiliary thread, started by libdc?
I've attached a blind attempt at fixing this. I have no idea if it helps in any
way. It may make things even worse.
Can you run with QT_FATAL_WARNINGS=1 and then give me the backtrace of that
QObject::connect warning? (this requires that Qt print no other warnings
before this one) My guess is that this is the emission of the
QBluetoothServiceDiscoveryAgent::serviceDiscovered signal starting at
QBluetoothServiceDiscoveryAgentPrivate::performMinimalServiceDiscovery.
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
>From 8634a0299afa65440b714d0831206c780a31a35a Mon Sep 17 00:00:00 2001
From: Thiago Macieira <[email protected]>
Date: Mon, 26 Sep 2016 14:59:55 -0700
Subject: [PATCH 1/1] Register the QtBluetooth metatypes for Qt
Blind attempt. It looks like we're using a thread, which makes the Qt
cross-thread signal delivery fail.
Signed-off-by: Thiago Macieira <[email protected]>
---
core/qtserialbluetooth.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/core/qtserialbluetooth.cpp b/core/qtserialbluetooth.cpp
index 1b227cf..893be8a 100644
--- a/core/qtserialbluetooth.cpp
+++ b/core/qtserialbluetooth.cpp
@@ -89,6 +89,11 @@ static dc_status_t qt_serial_open(void **userdata, const char* devaddr)
qDebug() << "Succesfully connected to device";
#else
+ // Register metatypes for Qt
+ qRegisterMetaType<QBluetoothServiceInfo>();
+ qRegisterMetaType<QBluetoothServiceInfo::Sequence>();
+ qRegisterMetaType<QBluetoothServiceInfo::Alternative>();
+
// Create a RFCOMM socket
serial_port->socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
--
2.10.0
_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface