summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-02-16 21:52:03 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-02-16 21:52:03 +0100
commiteef68dea35960670c1a1a1431d4541e1ed19c781 (patch)
tree097e6575b0cbc43704077d76372c986dcce3c998
parentfa2389dd0a6df58d73d221654db36ff791b96e43 (diff)
parentc87458961f29064ab69a308526b0243debcdf1f7 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: .qmake.conf src/bluetooth/qlowenergycontroller_bluez.cpp Change-Id: I00f45a2a22a045e7836f2caeb76cc5599ced6279
-rw-r--r--.gitignore10
-rw-r--r--dist/changes-5.6.089
-rw-r--r--qtconnectivity.pro2
-rw-r--r--src/bluetooth/android/inputstreamthread.cpp2
-rw-r--r--src/bluetooth/android/inputstreamthread_p.h2
-rw-r--r--src/bluetooth/bluez/hcimanager.cpp2
-rw-r--r--src/bluetooth/doc/src/bluetooth-index.qdoc26
-rw-r--r--src/bluetooth/qlowenergycontroller.cpp3
-rw-r--r--src/bluetooth/qlowenergycontroller_android.cpp4
-rw-r--r--src/bluetooth/qlowenergycontroller_bluez.cpp19
-rw-r--r--src/bluetooth/qlowenergycontroller_p.cpp4
-rw-r--r--src/bluetooth/qlowenergycontroller_p.h2
-rw-r--r--src/imports/bluetooth/plugins.qmltypes267
-rw-r--r--src/imports/nfc/plugins.qmltypes2
-rw-r--r--src/nfc/doc/src/nfc-index.qdoc14
-rw-r--r--src/nfc/qqmlndefrecord.cpp3
16 files changed, 178 insertions, 273 deletions
diff --git a/.gitignore b/.gitignore
index dfff2764..830bb63b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,6 +20,15 @@ qrc_*.cpp
*.moc
*so-deployment-settings.json
.qmake.cache
+.pch
+QtBluetooth.version*
+QtNfc.version*
+target_wrapper.sh
+uic_wrapper.sh
+qdoc_wrapper.sh
+qhelpgenerator_wrapper.sh
+qmlplugindump_wrapper.sh
+qdbusxml2cpp_wrapper.sh
config.log
tmp
imports/*
@@ -29,6 +38,7 @@ config.tests/bluez_le/bluez_le
examples/bluetooth/btchat/btchat
examples/bluetooth/btfiletransfer/btfiletransfer
examples/bluetooth/btscanner/btscanner
+examples/bluetooth/chat/qml_chat
examples/bluetooth/heartlistener/heartlistener
examples/bluetooth/lowenergyscanner/lowenergyscanner
examples/bluetooth/pingpong/pingpong
diff --git a/dist/changes-5.6.0 b/dist/changes-5.6.0
new file mode 100644
index 00000000..3d34719f
--- /dev/null
+++ b/dist/changes-5.6.0
@@ -0,0 +1,89 @@
+Qt 5.6 introduces new features and improvements as well as bugfixes
+over the 5.5.x series. For more details, refer to the online documentation
+included in this distribution. The documentation is also available online:
+
+ http://doc.qt.io/qt-5/index.html
+
+The Qt version 5.6 series is binary compatible with the 5.5.x series.
+Applications compiled for 5.5 will continue to run with 5.6.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+ https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+QtBluetooth
+-----------
+
+ - [QTBUG-46377] Added QBluetoothSocket::(set)preferredSecurityFlag().
+ - Q_DECLARE_METATYPE declarations added for various Q_ENUMS
+ - Fixed crash in btscanner example
+ - Added several documentation fixes
+ - Fixed wrong emission of CharacteristicWriteError where CharacteristicReadError
+ should have been emitted
+ - Fixed wrong emission of DescriptorWriteError where DescriptorReadError
+ should have been emitted
+ - Fixed wrong endianness handling in heartlistener example
+
+QtNfc
+-----
+
+ - API has been ported to Android
+ - Significantly improved implementation and documentation of QML NdefFilter
+ API
+ - Added general documentation improvements
+ - Fixed memory leak due to missing QQmlNdefRecord destructor
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+Android
+-------
+
+ - Increased robustness of Bluetooth Low Energy Service detail discovery
+ - [QTBUG-49367] Fixed missing jar file creation due to wrong build dependencies
+ - [QTBUG-50125] Fixed missing invalidation of QLowEnergyService details on
+ disconnect from device
+ - [QTBUG-50345] Fixed QBluetoothSocket::bytesAvailable()
+
+Linux/Bluez
+-----------
+
+ - [MER#1231] Enforce proper checking of error codes during device discovery
+ when using Bluez 4.x
+ - [MER#1225] Adjusted QBluetoothSocket::peerName() to comply with Jolla security
+ restrictions
+ - [MER1230] Enforced pairing of StartDiscovery() and StopDiscovery() during device
+ discovery on Bluez 4
+ - Fixed memory leak in Bluez 4 code path of QBluetoothServiceDiscoveryAgent
+ - [QTBUG-48481] Fixed crash during device discovery due to null pointer access on
+ Bluez 5
+ - [QTBUG-49650] Forcing usage of unbuffered L2CAP sockets for GATT protocol
+ - [QTBUG-49402] Sanitized handling of app names when registering internal agents
+ The app name is used to name the dbus path and not every permissible app name
+ character is a permissible dbus path character
+ - Removed assert in QLowEnergyController which could be caused by malicious device
+
+QNX/BlackBerry
+--------------
+
+ - Removed support for this platform from QtNfc
+ - Removed support for this platform from QtBluetooth
+
+iOS
+---
+
+ - [QTBUG-48518] Fixed compile and crash bugs when using iOS 9.x
+ - [QTBUG-48713] Enabled support for Bluetooth system alert dialog
+ - Fixed threading related timer issues
+ - [QTBUG-49476] Moved Low Energy code base to non-main dispatch queue
+ - [QTBUG-50125] Fixed missing invalidation of QLowEnergyService details on
+ disconnect from device
diff --git a/qtconnectivity.pro b/qtconnectivity.pro
index 4b7b9da9..b74830b8 100644
--- a/qtconnectivity.pro
+++ b/qtconnectivity.pro
@@ -1,4 +1,4 @@
-require(!android|qtHaveModule(androidextras))
+requires(!android|qtHaveModule(androidextras))
load(configure)
qtCompileTest(bluez)
diff --git a/src/bluetooth/android/inputstreamthread.cpp b/src/bluetooth/android/inputstreamthread.cpp
index eef72230..ecd9218e 100644
--- a/src/bluetooth/android/inputstreamthread.cpp
+++ b/src/bluetooth/android/inputstreamthread.cpp
@@ -71,7 +71,7 @@ bool InputStreamThread::run()
return true;
}
-bool InputStreamThread::bytesAvailable() const
+qint64 InputStreamThread::bytesAvailable() const
{
QMutexLocker locker(&m_mutex);
return m_socket_p->buffer.size();
diff --git a/src/bluetooth/android/inputstreamthread_p.h b/src/bluetooth/android/inputstreamthread_p.h
index be8dcbb6..741333ac 100644
--- a/src/bluetooth/android/inputstreamthread_p.h
+++ b/src/bluetooth/android/inputstreamthread_p.h
@@ -67,7 +67,7 @@ class InputStreamThread : public QObject
public:
explicit InputStreamThread(QBluetoothSocketPrivate *socket_p);
- bool bytesAvailable() const;
+ qint64 bytesAvailable() const;
bool run();
qint64 readData(char *data, qint64 maxSize);
diff --git a/src/bluetooth/bluez/hcimanager.cpp b/src/bluetooth/bluez/hcimanager.cpp
index 35ce2184..cf2f2a0f 100644
--- a/src/bluetooth/bluez/hcimanager.cpp
+++ b/src/bluetooth/bluez/hcimanager.cpp
@@ -145,7 +145,7 @@ int HciManager::hciForAddress(const QBluetoothAddress &deviceAdapter)
int result = memcmp(&adapter, &devInfo.bdaddr, sizeof(bdaddr_t));
if (result == 0 || deviceAdapter.isNull()) // addresses match
- return devRequest->dev_id;
+ return devInfo.dev_id;
}
return -1;
diff --git a/src/bluetooth/doc/src/bluetooth-index.qdoc b/src/bluetooth/doc/src/bluetooth-index.qdoc
index 8e5f1d35..8ea4c7f9 100644
--- a/src/bluetooth/doc/src/bluetooth-index.qdoc
+++ b/src/bluetooth/doc/src/bluetooth-index.qdoc
@@ -75,6 +75,32 @@ import statement in your \c .qml file:
\li \l {Qt Bluetooth C++ Classes}{C++ Classes}
\endlist
+\section2 Logging Categories
+
+The \l QtBluetooth module exports the following
+\l {Configuring Categories}{logging categories}:
+
+\table
+\header
+ \li Logging Category
+ \li Description
+\row
+ \li qt.bluetooth
+ \li Enables logging of cross platform code path in QtBluetooth
+\row
+ \li qt.bluetooth.android
+ \li Enables logging of the Android implementation
+\row
+ \li qt.bluetooth.bluez
+ \li Enables logging of the BLuez/Linux implementation
+\row
+ \li qt.bluetooth.ios
+ \li Enables logging of the iOS implementation
+\row
+ \li qt.bluetooth.osx
+ \li Enables logging of the OS X implementation
+\endtable
+
\section2 Examples
\list
\li QML
diff --git a/src/bluetooth/qlowenergycontroller.cpp b/src/bluetooth/qlowenergycontroller.cpp
index 838bbd0d..c39a797b 100644
--- a/src/bluetooth/qlowenergycontroller.cpp
+++ b/src/bluetooth/qlowenergycontroller.cpp
@@ -486,6 +486,7 @@ QLowEnergyController::QLowEnergyController(
d->remoteDevice = remoteDevice;
d->localAdapter = QBluetoothLocalDevice().address();
d->addressType = QLowEnergyController::PublicAddress;
+ d->init();
}
/*!
@@ -513,6 +514,7 @@ QLowEnergyController::QLowEnergyController(
d->localAdapter = QBluetoothLocalDevice().address();
d->addressType = QLowEnergyController::PublicAddress;
d->remoteName = remoteDeviceInfo.name();
+ d->init();
}
/*!
@@ -541,6 +543,7 @@ QLowEnergyController::QLowEnergyController(
d->role = CentralRole;
d->remoteDevice = remoteDevice;
d->localAdapter = localDevice;
+ d->init();
}
/*!
diff --git a/src/bluetooth/qlowenergycontroller_android.cpp b/src/bluetooth/qlowenergycontroller_android.cpp
index df3aaa54..f740abc7 100644
--- a/src/bluetooth/qlowenergycontroller_android.cpp
+++ b/src/bluetooth/qlowenergycontroller_android.cpp
@@ -58,6 +58,10 @@ QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate()
{
}
+void QLowEnergyControllerPrivate::init()
+{
+}
+
void QLowEnergyControllerPrivate::connectToDevice()
{
// required to pass unit test on default backend
diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp
index 06586192..729847f9 100644
--- a/src/bluetooth/qlowenergycontroller_bluez.cpp
+++ b/src/bluetooth/qlowenergycontroller_bluez.cpp
@@ -263,7 +263,10 @@ QLowEnergyControllerPrivate::QLowEnergyControllerPrivate()
{
registerQLowEnergyControllerMetaType();
qRegisterMetaType<QList<QLowEnergyHandle> >();
+}
+void QLowEnergyControllerPrivate::init()
+{
hciManager = new HciManager(localAdapter, this);
if (!hciManager->isValid())
return;
@@ -602,7 +605,12 @@ void QLowEnergyControllerPrivate::l2cpReadyRead()
break;
}
- Q_ASSERT(!openRequests.isEmpty());
+ if (openRequests.isEmpty()) {
+ qCWarning(QT_BT_BLUEZ) << "Received unexpected packet from peer, disconnecting.";
+ disconnectFromDevice();
+ return;
+ }
+
const Request request = openRequests.dequeue();
processReply(request, incomingPacket);
@@ -1074,7 +1082,14 @@ void QLowEnergyControllerPrivate::processReply(
Q_ASSERT(!p.isNull());
if (isErrorResponse) {
- readServiceValues(p->uuid, false); //read descriptor values
+ if (keys.count() == 1) {
+ // no more descriptors to discover
+ readServiceValues(p->uuid, false); //read descriptor values
+ } else {
+ // hop to the next descriptor
+ keys.removeFirst();
+ discoverNextDescriptor(p, keys, keys.first());
+ }
break;
}
diff --git a/src/bluetooth/qlowenergycontroller_p.cpp b/src/bluetooth/qlowenergycontroller_p.cpp
index eae0a43c..b4bd9a0f 100644
--- a/src/bluetooth/qlowenergycontroller_p.cpp
+++ b/src/bluetooth/qlowenergycontroller_p.cpp
@@ -54,6 +54,10 @@ QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate()
{
}
+void QLowEnergyControllerPrivate::init()
+{
+}
+
void QLowEnergyControllerPrivate::connectToDevice()
{
// required to pass unit test on default backend
diff --git a/src/bluetooth/qlowenergycontroller_p.h b/src/bluetooth/qlowenergycontroller_p.h
index 51ea5a83..6e231dd1 100644
--- a/src/bluetooth/qlowenergycontroller_p.h
+++ b/src/bluetooth/qlowenergycontroller_p.h
@@ -111,6 +111,8 @@ public:
QLowEnergyControllerPrivate();
~QLowEnergyControllerPrivate();
+ void init();
+
void setError(QLowEnergyController::Error newError);
bool isValidLocalAdapter();
diff --git a/src/imports/bluetooth/plugins.qmltypes b/src/imports/bluetooth/plugins.qmltypes
index e945441a..99ea567f 100644
--- a/src/imports/bluetooth/plugins.qmltypes
+++ b/src/imports/bluetooth/plugins.qmltypes
@@ -7,272 +7,7 @@ import QtQuick.tooling 1.2
// 'qmlplugindump -nonrelocatable QtBluetooth 5.6'
Module {
- dependencies: []
- Component {
- name: "QAbstractItemModel"
- prototype: "QObject"
- Enum {
- name: "LayoutChangeHint"
- values: {
- "NoLayoutChangeHint": 0,
- "VerticalSortHint": 1,
- "HorizontalSortHint": 2
- }
- }
- Signal {
- name: "dataChanged"
- Parameter { name: "topLeft"; type: "QModelIndex" }
- Parameter { name: "bottomRight"; type: "QModelIndex" }
- Parameter { name: "roles"; type: "QVector<int>" }
- }
- Signal {
- name: "dataChanged"
- Parameter { name: "topLeft"; type: "QModelIndex" }
- Parameter { name: "bottomRight"; type: "QModelIndex" }
- }
- Signal {
- name: "headerDataChanged"
- Parameter { name: "orientation"; type: "Qt::Orientation" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "layoutChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" }
- }
- Signal {
- name: "layoutChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- }
- Signal { name: "layoutChanged" }
- Signal {
- name: "layoutAboutToBeChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" }
- }
- Signal {
- name: "layoutAboutToBeChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- }
- Signal { name: "layoutAboutToBeChanged" }
- Signal {
- name: "rowsAboutToBeInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "rowsInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "rowsAboutToBeRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "rowsRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsAboutToBeInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsAboutToBeRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal { name: "modelAboutToBeReset" }
- Signal { name: "modelReset" }
- Signal {
- name: "rowsAboutToBeMoved"
- Parameter { name: "sourceParent"; type: "QModelIndex" }
- Parameter { name: "sourceStart"; type: "int" }
- Parameter { name: "sourceEnd"; type: "int" }
- Parameter { name: "destinationParent"; type: "QModelIndex" }
- Parameter { name: "destinationRow"; type: "int" }
- }
- Signal {
- name: "rowsMoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "start"; type: "int" }
- Parameter { name: "end"; type: "int" }
- Parameter { name: "destination"; type: "QModelIndex" }
- Parameter { name: "row"; type: "int" }
- }
- Signal {
- name: "columnsAboutToBeMoved"
- Parameter { name: "sourceParent"; type: "QModelIndex" }
- Parameter { name: "sourceStart"; type: "int" }
- Parameter { name: "sourceEnd"; type: "int" }
- Parameter { name: "destinationParent"; type: "QModelIndex" }
- Parameter { name: "destinationColumn"; type: "int" }
- }
- Signal {
- name: "columnsMoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "start"; type: "int" }
- Parameter { name: "end"; type: "int" }
- Parameter { name: "destination"; type: "QModelIndex" }
- Parameter { name: "column"; type: "int" }
- }
- Method { name: "submit"; type: "bool" }
- Method { name: "revert" }
- Method {
- name: "hasIndex"
- type: "bool"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "hasIndex"
- type: "bool"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- }
- Method {
- name: "index"
- type: "QModelIndex"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "index"
- type: "QModelIndex"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- }
- Method {
- name: "parent"
- type: "QModelIndex"
- Parameter { name: "child"; type: "QModelIndex" }
- }
- Method {
- name: "sibling"
- type: "QModelIndex"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- Parameter { name: "idx"; type: "QModelIndex" }
- }
- Method {
- name: "rowCount"
- type: "int"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method { name: "rowCount"; type: "int" }
- Method {
- name: "columnCount"
- type: "int"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method { name: "columnCount"; type: "int" }
- Method {
- name: "hasChildren"
- type: "bool"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method { name: "hasChildren"; type: "bool" }
- Method {
- name: "data"
- type: "QVariant"
- Parameter { name: "index"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- }
- Method {
- name: "data"
- type: "QVariant"
- Parameter { name: "index"; type: "QModelIndex" }
- }
- Method {
- name: "setData"
- type: "bool"
- Parameter { name: "index"; type: "QModelIndex" }
- Parameter { name: "value"; type: "QVariant" }
- Parameter { name: "role"; type: "int" }
- }
- Method {
- name: "setData"
- type: "bool"
- Parameter { name: "index"; type: "QModelIndex" }
- Parameter { name: "value"; type: "QVariant" }
- }
- Method {
- name: "headerData"
- type: "QVariant"
- Parameter { name: "section"; type: "int" }
- Parameter { name: "orientation"; type: "Qt::Orientation" }
- Parameter { name: "role"; type: "int" }
- }
- Method {
- name: "headerData"
- type: "QVariant"
- Parameter { name: "section"; type: "int" }
- Parameter { name: "orientation"; type: "Qt::Orientation" }
- }
- Method {
- name: "fetchMore"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "canFetchMore"
- type: "bool"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "flags"
- type: "Qt::ItemFlags"
- Parameter { name: "index"; type: "QModelIndex" }
- }
- Method {
- name: "match"
- type: "QModelIndexList"
- Parameter { name: "start"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- Parameter { name: "value"; type: "QVariant" }
- Parameter { name: "hits"; type: "int" }
- Parameter { name: "flags"; type: "Qt::MatchFlags" }
- }
- Method {
- name: "match"
- type: "QModelIndexList"
- Parameter { name: "start"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- Parameter { name: "value"; type: "QVariant" }
- Parameter { name: "hits"; type: "int" }
- }
- Method {
- name: "match"
- type: "QModelIndexList"
- Parameter { name: "start"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- Parameter { name: "value"; type: "QVariant" }
- }
- }
- Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" }
+ dependencies: ["QtQuick 2.0"]
Component {
name: "QDeclarativeBluetoothDiscoveryModel"
prototype: "QAbstractListModel"
diff --git a/src/imports/nfc/plugins.qmltypes b/src/imports/nfc/plugins.qmltypes
index df1b2a3a..88794b71 100644
--- a/src/imports/nfc/plugins.qmltypes
+++ b/src/imports/nfc/plugins.qmltypes
@@ -7,7 +7,7 @@ import QtQuick.tooling 1.2
// 'qmlplugindump -nonrelocatable QtNfc 5.6'
Module {
- dependencies: []
+ dependencies: ["QtQuick 2.0"]
Component {
name: "QDeclarativeNdefFilter"
prototype: "QObject"
diff --git a/src/nfc/doc/src/nfc-index.qdoc b/src/nfc/doc/src/nfc-index.qdoc
index da8833d8..a37ba293 100644
--- a/src/nfc/doc/src/nfc-index.qdoc
+++ b/src/nfc/doc/src/nfc-index.qdoc
@@ -73,6 +73,20 @@ import statement in your \c .qml file:
\li \l {Qt NFC C++ Classes}{C++ Classes}
\endlist
+\section2 Logging Categories
+
+The \l QtNfc module exports the following
+\l {Configuring Categories}{logging categories}:
+
+\table
+\header
+ \li Logging Category
+ \li Description
+\row
+ \li qt.nfc.neard
+ \li Enables logging of the Neard/Linux implementation
+\endtable
+
\section2 Examples
\list
\li QML
diff --git a/src/nfc/qqmlndefrecord.cpp b/src/nfc/qqmlndefrecord.cpp
index 5cd5b4d5..1f855ede 100644
--- a/src/nfc/qqmlndefrecord.cpp
+++ b/src/nfc/qqmlndefrecord.cpp
@@ -249,6 +249,9 @@ QQmlNdefRecord::QQmlNdefRecord(const QNdefRecord &record, QObject *parent)
d_ptr->record = record;
}
+/*!
+ Destroys the QQmlNdefRecord instance.
+*/
QQmlNdefRecord::~QQmlNdefRecord()
{
delete d_ptr;