Source

Target

Commits (4)
Showing with 52 additions and 25 deletions
......@@ -258,6 +258,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::startLowEnergyScan()
env->ExceptionClear();
m_active = NoScanActive;
emit q->finished();
return;
}
leScanner.setField<jlong>("qtObject", reinterpret_cast<long>(receiver));
......@@ -268,6 +269,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::startLowEnergyScan()
qCWarning(QT_BT_ANDROID) << "Cannot start BTLE device scanner";
m_active = NoScanActive;
emit q->finished();
return;
}
if (!leScanTimeout) {
......
......@@ -92,12 +92,19 @@ QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
delete adapterBluez5;
}
//TODO: Qt6 remove the pendingCancel/pendingStart logic as it is cumbersome.
// It is a behavior change across all platforms and was initially done
// for Bluez. The behavior should be similar to QBluetoothServiceDiscoveryAgent
// PendingCancel creates issues whereby the agent is still shutting down
// but isActive() below already returns false. This means the isActive() is
// out of sync with the finished() and cancel() signal.
bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const
{
if (pendingStart)
return true;
if (pendingCancel)
return false;
return false; //TODO Qt6: remove pending[Cancel|Start] logic (see comment above)
return (adapter || adapterBluez5);
}
......@@ -195,8 +202,8 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start()
errorString = discoveryReply.error().message();
lastError = QBluetoothDeviceDiscoveryAgent::InputOutputError;
Q_Q(QBluetoothDeviceDiscoveryAgent);
emit q->error(lastError);
qCDebug(QT_BT_BLUEZ) << Q_FUNC_INFO << "ERROR: " << errorString;
emit q->error(lastError);
return;
}
}
......@@ -415,8 +422,8 @@ void QBluetoothDeviceDiscoveryAgentPrivate::_q_propertyChanged(const QString &na
adapter->deleteLater();
adapter = 0;
emit q->canceled();
pendingCancel = false;
emit q->canceled();
} else if (pendingStart) {
adapter->deleteLater();
adapter = 0;
......@@ -492,8 +499,8 @@ void QBluetoothDeviceDiscoveryAgentPrivate::_q_discoveryFinished()
adapterBluez5 = 0;
if (pendingCancel && !pendingStart) {
emit q->canceled();
pendingCancel = false;
emit q->canceled();
} else if (pendingStart) {
pendingStart = false;
pendingCancel = false;
......
......@@ -143,9 +143,9 @@ QT_BEGIN_NAMESPACE
local default Bluetooth adapter.
*/
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent)
: QObject(parent), d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(QBluetoothAddress()))
: QObject(parent),
d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(this, QBluetoothAddress()))
{
d_ptr->q_ptr = this;
}
/*!
......@@ -161,9 +161,9 @@ QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent
\sa error()
*/
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent)
: QObject(parent), d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(deviceAdapter))
: QObject(parent),
d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(this, deviceAdapter))
{
d_ptr->q_ptr = this;
if (!deviceAdapter.isNull()) {
const QList<QBluetoothHostInfo> localDevices = QBluetoothLocalDevice::allDevices();
foreach (const QBluetoothHostInfo &hostInfo, localDevices) {
......
......@@ -48,11 +48,13 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
const QBluetoothAddress &/*deviceAdapter*/)
QBluetoothServiceDiscoveryAgent *qp, const QBluetoothAddress &/*deviceAdapter*/)
: error(QBluetoothServiceDiscoveryAgent::NoError),
state(Inactive), deviceDiscoveryAgent(0),
mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery),
singleDevice(false), receiver(0), localDeviceReceiver(0)
singleDevice(false), receiver(0), localDeviceReceiver(0),
q_ptr(qp)
{
QList<QBluetoothHostInfo> devices = QBluetoothLocalDevice::allDevices();
Q_ASSERT(devices.count() <= 1); //Android only supports one device at the moment
......
......@@ -62,10 +62,12 @@ static inline void convertAddress(quint64 from, quint8 (&to)[6])
to[5] = (from >> 40) & 0xff;
}
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter)
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
QBluetoothServiceDiscoveryAgent *qp, const QBluetoothAddress &deviceAdapter)
: error(QBluetoothServiceDiscoveryAgent::NoError), m_deviceAdapterAddress(deviceAdapter), state(Inactive), deviceDiscoveryAgent(0),
mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery), singleDevice(false),
manager(0), managerBluez5(0), adapter(0), device(0), sdpScannerProcess(0)
manager(0), managerBluez5(0), adapter(0), device(0), sdpScannerProcess(0),
q_ptr(qp)
{
if (isBluez5()) {
managerBluez5 = new OrgFreedesktopDBusObjectManagerInterface(
......
......@@ -62,7 +62,8 @@ public:
ServiceDiscovery,
};
QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &localAddress);
QBluetoothServiceDiscoveryAgentPrivate(QBluetoothServiceDiscoveryAgent *qp,
const QBluetoothAddress &localAddress);
void startDeviceDiscovery();
void stopDeviceDiscovery();
......@@ -110,8 +111,9 @@ private:
OSXBluetooth::ObjCScopedPointer<ObjCServiceInquiry> serviceInquiry;
};
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &localAddress) :
q_ptr(0),
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
QBluetoothServiceDiscoveryAgent *qp, const QBluetoothAddress &localAddress) :
q_ptr(qp),
error(QBluetoothServiceDiscoveryAgent::NoError),
singleDevice(false),
localAdapterAddress(localAddress),
......@@ -423,15 +425,15 @@ void QBluetoothServiceDiscoveryAgentPrivate::serviceDiscoveryFinished()
}
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent)
: QObject(parent), d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(QBluetoothAddress()))
: QObject(parent),
d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(this, QBluetoothAddress()))
{
d_ptr->q_ptr = this;
}
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent)
: QObject(parent), d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(deviceAdapter))
: QObject(parent),
d_ptr(new QBluetoothServiceDiscoveryAgentPrivate(this, deviceAdapter))
{
d_ptr->q_ptr = this;
if (!deviceAdapter.isNull()) {
const QList<QBluetoothHostInfo> localDevices = QBluetoothLocalDevice::allDevices();
foreach (const QBluetoothHostInfo &hostInfo, localDevices) {
......
......@@ -39,10 +39,14 @@
QT_BEGIN_NAMESPACE
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter)
: error(QBluetoothServiceDiscoveryAgent::NoError), state(Inactive),
deviceDiscoveryAgent(0), mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery),
singleDevice(false)
QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
QBluetoothServiceDiscoveryAgent *qp, const QBluetoothAddress &deviceAdapter)
: error(QBluetoothServiceDiscoveryAgent::NoError),
state(Inactive),
deviceDiscoveryAgent(0),
mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery),
singleDevice(false),
q_ptr(qp)
{
#ifndef QT_IOS_BLUETOOTH
printDummyWarning();
......
......@@ -87,7 +87,8 @@ public:
ServiceDiscovery,
};
QBluetoothServiceDiscoveryAgentPrivate(const QBluetoothAddress &deviceAdapter);
QBluetoothServiceDiscoveryAgentPrivate(QBluetoothServiceDiscoveryAgent *qp,
const QBluetoothAddress &deviceAdapter);
~QBluetoothServiceDiscoveryAgentPrivate();
void startDeviceDiscovery();
......
......@@ -76,7 +76,8 @@ public:
QNearFieldTagType1Private(QNearFieldTagType1 *q)
: q_ptr(q), m_readNdefMessageState(NotReadingNdefMessage),
m_tlvReader(0),
m_writeNdefMessageState(NotWritingNdefMessage)
m_writeNdefMessageState(NotWritingNdefMessage),
m_tlvWriter(0)
{ }
QNearFieldTagType1 *q_ptr;
......@@ -164,11 +165,13 @@ void QNearFieldTagType1Private::progressToNextNdefReadMessageState()
}
m_readNdefMessageState = NdefReadReadingTlv;
delete m_tlvReader;
m_tlvReader = new QTlvReader(q);
// fall through
}
case NdefReadReadingTlv:
Q_ASSERT(m_tlvReader);
while (!m_tlvReader->atEnd()) {
if (!m_tlvReader->readNext())
break;
......@@ -240,11 +243,13 @@ void QNearFieldTagType1Private::progressToNextNdefWriteMessageState()
}
m_writeNdefMessageState = NdefWriteReadingTlv;
delete m_tlvReader;
m_tlvReader = new QTlvReader(q);
// fall through
}
case NdefWriteReadingTlv:
Q_ASSERT(m_tlvReader);
while (!m_tlvReader->atEnd()) {
if (!m_tlvReader->readNext())
break;
......@@ -264,6 +269,7 @@ void QNearFieldTagType1Private::progressToNextNdefWriteMessageState()
// fall through
case NdefWriteWritingTlv:
delete m_tlvWriter;
m_tlvWriter = new QTlvWriter(q);
// write old TLVs
......@@ -282,6 +288,7 @@ void QNearFieldTagType1Private::progressToNextNdefWriteMessageState()
// fall through
case NdefWriteWritingTlvFlush:
// flush the writer
Q_ASSERT(m_tlvWriter);
if (m_tlvWriter->process(true)) {
m_nextExpectedRequestId = QNearFieldTarget::RequestId();
m_writeNdefMessageState = NotWritingNdefMessage;
......