diff options
-rw-r--r-- | src/bluetooth/qbluetoothaddress.cpp | 15 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice.cpp | 11 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_android.cpp | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_bluez.cpp | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_osx.mm | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_p.cpp | 4 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_p.h | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothuuid.cpp | 27 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller.cpp | 11 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_android.cpp | 1 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_bluez.cpp | 5 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_osx.mm | 16 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_p.cpp | 1 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_p.h | 2 |
14 files changed, 64 insertions, 37 deletions
diff --git a/src/bluetooth/qbluetoothaddress.cpp b/src/bluetooth/qbluetoothaddress.cpp index 8e3c29c6..5a0abf45 100644 --- a/src/bluetooth/qbluetoothaddress.cpp +++ b/src/bluetooth/qbluetoothaddress.cpp @@ -59,15 +59,13 @@ QT_BEGIN_NAMESPACE Returns true if the Bluetooth addresses are not equal, otherwise returns false. */ -namespace { -class BluetoothAddressRegisterMetaTypes +static void registerQBluetoothAddressMetaType() { -public: - BluetoothAddressRegisterMetaTypes() - { + static bool initDone = false; + if (!initDone) { qRegisterMetaType<QBluetoothAddress>(); + initDone = true; } -} _registerBluetoothAddressMetaTypes; } /*! @@ -76,6 +74,7 @@ public: QBluetoothAddress::QBluetoothAddress() : d_ptr(new QBluetoothAddressPrivate) { + registerQBluetoothAddressMetaType(); } /*! @@ -84,6 +83,8 @@ QBluetoothAddress::QBluetoothAddress() : QBluetoothAddress::QBluetoothAddress(quint64 address) : d_ptr(new QBluetoothAddressPrivate) { + registerQBluetoothAddressMetaType(); + Q_D(QBluetoothAddress); d->m_address = address; } @@ -97,6 +98,8 @@ QBluetoothAddress::QBluetoothAddress(quint64 address) : QBluetoothAddress::QBluetoothAddress(const QString &address) : d_ptr(new QBluetoothAddressPrivate) { + registerQBluetoothAddressMetaType(); + Q_D(QBluetoothAddress); QString a = address; diff --git a/src/bluetooth/qbluetoothlocaldevice.cpp b/src/bluetooth/qbluetoothlocaldevice.cpp index 99264962..eb270f8d 100644 --- a/src/bluetooth/qbluetoothlocaldevice.cpp +++ b/src/bluetooth/qbluetoothlocaldevice.cpp @@ -97,20 +97,17 @@ QT_BEGIN_NAMESPACE */ -namespace { -class LocalDeviceRegisterMetaTypes +void registerQBluetoothLocalDeviceMetaType() { -public: - LocalDeviceRegisterMetaTypes() - { + static bool initDone = false; + if (!initDone) { qRegisterMetaType<QBluetoothLocalDevice::HostMode>(); qRegisterMetaType<QBluetoothLocalDevice::Pairing>(); qRegisterMetaType<QBluetoothLocalDevice::Error>(); + initDone = true; } -} _registerLocalDeviceMetaTypes; } - #ifndef QT_OSX_BLUETOOTH /*! diff --git a/src/bluetooth/qbluetoothlocaldevice_android.cpp b/src/bluetooth/qbluetoothlocaldevice_android.cpp index 20ac3d0a..083bc190 100644 --- a/src/bluetooth/qbluetoothlocaldevice_android.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_android.cpp @@ -52,6 +52,8 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate( obj(0), pendingHostModeTransition(false) { + registerQBluetoothLocalDeviceMetaType(); + initialize(address); receiver = new LocalDeviceBroadcastReceiver(q_ptr); diff --git a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp index d2ec70b9..0f5d4917 100644 --- a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp @@ -656,6 +656,8 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice msgConnection(0), q_ptr(q) { + registerQBluetoothLocalDeviceMetaType(); + if (isBluez5()) initializeAdapterBluez5(); else diff --git a/src/bluetooth/qbluetoothlocaldevice_osx.mm b/src/bluetooth/qbluetoothlocaldevice_osx.mm index 71b7b81a..b1957d09 100644 --- a/src/bluetooth/qbluetoothlocaldevice_osx.mm +++ b/src/bluetooth/qbluetoothlocaldevice_osx.mm @@ -105,6 +105,8 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice const QBluetoothAddress &address) : q_ptr(q) { + registerQBluetoothLocalDeviceMetaType(); + Q_ASSERT_X(q, Q_FUNC_INFO, "invalid q_ptr (null)"); QT_BT_MAC_AUTORELEASEPOOL; diff --git a/src/bluetooth/qbluetoothlocaldevice_p.cpp b/src/bluetooth/qbluetoothlocaldevice_p.cpp index 2785e84c..0b7c5c44 100644 --- a/src/bluetooth/qbluetoothlocaldevice_p.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_p.cpp @@ -34,18 +34,22 @@ #include "qbluetoothlocaldevice.h" #include "qbluetoothaddress.h" +#include "qbluetoothlocaldevice_p.h" + QT_BEGIN_NAMESPACE QBluetoothLocalDevice::QBluetoothLocalDevice(QObject *parent) : QObject(parent), d_ptr(0) { + registerQBluetoothLocalDeviceMetaType(); } QBluetoothLocalDevice::QBluetoothLocalDevice(const QBluetoothAddress &, QObject *parent) : QObject(parent), d_ptr(0) { + registerQBluetoothLocalDeviceMetaType(); } QString QBluetoothLocalDevice::name() const diff --git a/src/bluetooth/qbluetoothlocaldevice_p.h b/src/bluetooth/qbluetoothlocaldevice_p.h index 1d4db40d..70d1727b 100644 --- a/src/bluetooth/qbluetoothlocaldevice_p.h +++ b/src/bluetooth/qbluetoothlocaldevice_p.h @@ -80,6 +80,8 @@ QT_END_NAMESPACE QT_BEGIN_NAMESPACE +extern void registerQBluetoothLocalDeviceMetaType(); + class QBluetoothAddress; #ifdef QT_ANDROID_BLUETOOTH diff --git a/src/bluetooth/qbluetoothuuid.cpp b/src/bluetooth/qbluetoothuuid.cpp index a7ee9c20..3c8dc786 100644 --- a/src/bluetooth/qbluetoothuuid.cpp +++ b/src/bluetooth/qbluetoothuuid.cpp @@ -497,16 +497,13 @@ Q_GLOBAL_STATIC_WITH_ARGS(QUuid, baseUuid, ("{00000000-0000-1000-8000-00805F9B34 \value UnknownDescriptorType The descriptor type is unknown. */ -namespace +static void registerQBluetoothUuidMetaType() { - class BtUuidRegisterMetaTypes - { - public: - BtUuidRegisterMetaTypes() - { - qRegisterMetaType<QBluetoothUuid>(); - } - } _registerBtUuidMetaTypes; + static bool initDone = false; + if (!initDone) { + qRegisterMetaType<QBluetoothUuid>(); + initDone = true; + } } /*! @@ -514,6 +511,7 @@ namespace */ QBluetoothUuid::QBluetoothUuid() { + registerQBluetoothUuidMetaType(); } /*! @@ -525,6 +523,7 @@ QBluetoothUuid::QBluetoothUuid(ProtocolUuid uuid) baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5], baseUuid()->data4[6], baseUuid()->data4[7]) { + registerQBluetoothUuidMetaType(); } /*! @@ -535,6 +534,7 @@ QBluetoothUuid::QBluetoothUuid(ServiceClassUuid uuid) baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5], baseUuid()->data4[6], baseUuid()->data4[7]) { + registerQBluetoothUuidMetaType(); } /*! @@ -546,6 +546,7 @@ QBluetoothUuid::QBluetoothUuid(CharacteristicType uuid) baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5], baseUuid()->data4[6], baseUuid()->data4[7]) { + registerQBluetoothUuidMetaType(); } /*! @@ -557,7 +558,7 @@ QBluetoothUuid::QBluetoothUuid(DescriptorType uuid) baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5], baseUuid()->data4[6], baseUuid()->data4[7]) { - + registerQBluetoothUuidMetaType(); } /*! @@ -568,6 +569,7 @@ QBluetoothUuid::QBluetoothUuid(quint16 uuid) baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5], baseUuid()->data4[6], baseUuid()->data4[7]) { + registerQBluetoothUuidMetaType(); } /*! @@ -578,6 +580,7 @@ QBluetoothUuid::QBluetoothUuid(quint32 uuid) baseUuid()->data4[2], baseUuid()->data4[3], baseUuid()->data4[4], baseUuid()->data4[5], baseUuid()->data4[6], baseUuid()->data4[7]) { + registerQBluetoothUuidMetaType(); } /*! @@ -587,6 +590,7 @@ QBluetoothUuid::QBluetoothUuid(quint32 uuid) */ QBluetoothUuid::QBluetoothUuid(quint128 uuid) { + registerQBluetoothUuidMetaType(); QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wstrict-aliasing") data1 = qFromBigEndian<quint32>(*reinterpret_cast<quint32 *>(&uuid.data[0])); @@ -605,6 +609,7 @@ QT_WARNING_POP QBluetoothUuid::QBluetoothUuid(const QString &uuid) : QUuid(uuid) { + registerQBluetoothUuidMetaType(); } /*! @@ -613,6 +618,7 @@ QBluetoothUuid::QBluetoothUuid(const QString &uuid) QBluetoothUuid::QBluetoothUuid(const QBluetoothUuid &uuid) : QUuid(uuid) { + registerQBluetoothUuidMetaType(); } /*! @@ -621,6 +627,7 @@ QBluetoothUuid::QBluetoothUuid(const QBluetoothUuid &uuid) QBluetoothUuid::QBluetoothUuid(const QUuid &uuid) : QUuid(uuid) { + registerQBluetoothUuidMetaType(); } /*! diff --git a/src/bluetooth/qlowenergycontroller.cpp b/src/bluetooth/qlowenergycontroller.cpp index 62e8f7e3..e39df97c 100644 --- a/src/bluetooth/qlowenergycontroller.cpp +++ b/src/bluetooth/qlowenergycontroller.cpp @@ -194,18 +194,17 @@ QT_BEGIN_NAMESPACE \sa discoverServices(), error() */ -namespace { -class QLowEnergyControllerMetaTypes +void registerQLowEnergyControllerMetaType() { -public: - QLowEnergyControllerMetaTypes() - { + static bool initDone = false; + if (!initDone) { qRegisterMetaType<QLowEnergyController::ControllerState>(); qRegisterMetaType<QLowEnergyController::Error>(); + initDone = true; } -} qLowEnergyControllerMetaTypes; } + void QLowEnergyControllerPrivate::setError( QLowEnergyController::Error newError) { diff --git a/src/bluetooth/qlowenergycontroller_android.cpp b/src/bluetooth/qlowenergycontroller_android.cpp index b04ddedd..767c91f8 100644 --- a/src/bluetooth/qlowenergycontroller_android.cpp +++ b/src/bluetooth/qlowenergycontroller_android.cpp @@ -45,6 +45,7 @@ QLowEnergyControllerPrivate::QLowEnergyControllerPrivate() error(QLowEnergyController::NoError), hub(0) { + registerQLowEnergyControllerMetaType(); } QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate() diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp index b1384fea..a00ac565 100644 --- a/src/bluetooth/qlowenergycontroller_bluez.cpp +++ b/src/bluetooth/qlowenergycontroller_bluez.cpp @@ -205,6 +205,7 @@ QLowEnergyControllerPrivate::QLowEnergyControllerPrivate() encryptionChangePending(false), hciManager(0) { + registerQLowEnergyControllerMetaType(); qRegisterMetaType<QList<QLowEnergyHandle> >(); hciManager = new HciManager(localAdapter, this); @@ -268,7 +269,9 @@ void QLowEnergyControllerPrivate::connectToDevice() } // connect - l2cpSocket->connectToService(remoteDevice, ATTRIBUTE_CHANNEL_ID); + // Unbuffered mode required to separate each GATT packet + l2cpSocket->connectToService(remoteDevice, ATTRIBUTE_CHANNEL_ID, + QIODevice::ReadWrite | QIODevice::Unbuffered); } void QLowEnergyControllerPrivate::l2cpConnected() diff --git a/src/bluetooth/qlowenergycontroller_osx.mm b/src/bluetooth/qlowenergycontroller_osx.mm index d0d65248..396f82bb 100644 --- a/src/bluetooth/qlowenergycontroller_osx.mm +++ b/src/bluetooth/qlowenergycontroller_osx.mm @@ -56,17 +56,15 @@ QT_BEGIN_NAMESPACE namespace { - -class QLowEnergyControllerMetaTypes +static void registerQLowEnergyControllerMetaType() { -public: - QLowEnergyControllerMetaTypes() - { + static bool initDone = false; + if (!initDone) { qRegisterMetaType<QLowEnergyController::ControllerState>(); qRegisterMetaType<QLowEnergyController::Error>(); + initDone = true; } -} qLowEnergyControllerMetaTypes; - +} typedef QSharedPointer<QLowEnergyServicePrivate> ServicePrivate; @@ -137,6 +135,8 @@ QLowEnergyControllerPrivateOSX::QLowEnergyControllerPrivateOSX(QLowEnergyControl controllerState(QLowEnergyController::UnconnectedState), addressType(QLowEnergyController::PublicAddress) { + registerQLowEnergyControllerMetaType(); + // This is the "wrong" constructor - no valid device UUID to connect later. Q_ASSERT_X(q, Q_FUNC_INFO, "invalid q_ptr (null)"); // We still create a manager, to simplify error handling later. @@ -157,6 +157,8 @@ QLowEnergyControllerPrivateOSX::QLowEnergyControllerPrivateOSX(QLowEnergyControl controllerState(QLowEnergyController::UnconnectedState), addressType(QLowEnergyController::PublicAddress) { + registerQLowEnergyControllerMetaType(); + Q_ASSERT_X(q, Q_FUNC_INFO, "invalid q_ptr (null)"); centralManager.reset([[ObjCCentralManager alloc] initWithDelegate:this]); if (!centralManager) { diff --git a/src/bluetooth/qlowenergycontroller_p.cpp b/src/bluetooth/qlowenergycontroller_p.cpp index b3c718b5..79addae2 100644 --- a/src/bluetooth/qlowenergycontroller_p.cpp +++ b/src/bluetooth/qlowenergycontroller_p.cpp @@ -40,6 +40,7 @@ QLowEnergyControllerPrivate::QLowEnergyControllerPrivate() state(QLowEnergyController::UnconnectedState), error(QLowEnergyController::NoError) { + registerQLowEnergyControllerMetaType(); } QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate() diff --git a/src/bluetooth/qlowenergycontroller_p.h b/src/bluetooth/qlowenergycontroller_p.h index f587d3f9..40318700 100644 --- a/src/bluetooth/qlowenergycontroller_p.h +++ b/src/bluetooth/qlowenergycontroller_p.h @@ -84,6 +84,8 @@ class HciManager; class LowEnergyNotificationHub; #endif +extern void registerQLowEnergyControllerMetaType(); + typedef QMap<QBluetoothUuid, QSharedPointer<QLowEnergyServicePrivate> > ServiceDataMap; class QLowEnergyControllerPrivate : public QObject |