summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFabian Bumberger <fbumberger@rim.com>2014-06-25 22:56:56 +0200
committerFabian Bumberger <fbumberger@rim.com>2014-07-02 12:42:02 +0200
commit0ea4cc4d1e84b01e589e5e19f0323a2c80503219 (patch)
tree18f007937f93c1eb05495e24562cefa790ba5e15 /src
parentde847406f71a1f5a8bf24b2b3fc99471e62c2901 (diff)
Clean up neard implementation
Besides some code cleanups this patch makes sure to only build the neard implementation if dbus is available. This patch also deals with the possibility that the neard daemon is not running on the system. Change-Id: I8546d34b808d8236e0434e00cf5950b31e20cb72 Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/nfc/nfc.pro19
-rw-r--r--src/nfc/qnearfieldmanager.cpp2
-rw-r--r--src/nfc/qnearfieldmanager_neard.cpp62
-rw-r--r--src/nfc/qnearfieldmanager_neard_p.h (renamed from src/nfc/qnearfieldmanager_neard.h)8
4 files changed, 59 insertions, 32 deletions
diff --git a/src/nfc/nfc.pro b/src/nfc/nfc.pro
index 3d445415..8342cf2a 100644
--- a/src/nfc/nfc.pro
+++ b/src/nfc/nfc.pro
@@ -53,8 +53,7 @@ SOURCES += \
qqmlndefrecord.cpp \
qndefnfcsmartposterrecord.cpp \
qnearfieldsharemanager.cpp \
- qnearfieldsharetarget.cpp \
- qnearfieldmanager_neard.cpp
+ qnearfieldsharetarget.cpp
CONFIG(blackberry) {
NFC_BACKEND_AVAILABLE = yes
@@ -100,23 +99,27 @@ CONFIG(blackberry) {
}
}
-linux {
+linux:qtHaveModule(dbus) {
NFC_BACKEND_AVAILABLE = yes
QT += dbus
+ DEFINES += NEARD_NFC
+
PRIVATE_HEADERS += \
qllcpsocket_p_p.h \
qllcpserver_p_p.h \
- qnearfieldmanager_neard.h \
+ qnearfieldmanager_neard_p.h \
qnearfieldsharemanagerimpl_p.h \
- qnearfieldsharetargetimpl_p.h
+ qnearfieldsharetargetimpl_p.h \
+ qnearfieldtarget_neard_p.h
SOURCES += \
qllcpsocket_p.cpp \
qllcpserver_p.cpp \
qnearfieldsharemanagerimpl_p.cpp \
- qnearfieldsharetargetimpl_p.cpp
+ qnearfieldsharetargetimpl_p.cpp \
+ qnearfieldmanager_neard.cpp
include(neard/neard.pri)
}
@@ -162,6 +165,4 @@ isEmpty(NFC_BACKEND_AVAILABLE) {
qnearfieldsharetargetimpl_p.cpp
}
-HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS \
- qnearfieldmanager_neard.h \
- qnearfieldtarget_neard_p.h
+HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
diff --git a/src/nfc/qnearfieldmanager.cpp b/src/nfc/qnearfieldmanager.cpp
index 88656a6e..0f8c1a8f 100644
--- a/src/nfc/qnearfieldmanager.cpp
+++ b/src/nfc/qnearfieldmanager.cpp
@@ -46,6 +46,8 @@
#include "qnearfieldmanager_simulator_p.h"
#elif defined(QNX_NFC)
#include "qnearfieldmanager_qnx_p.h"
+#elif defined(NEARD_NFC)
+#include "qnearfieldmanager_neard_p.h"
#else
#include "qnearfieldmanagerimpl_p.h"
#endif
diff --git a/src/nfc/qnearfieldmanager_neard.cpp b/src/nfc/qnearfieldmanager_neard.cpp
index 6bf82236..76ea6635 100644
--- a/src/nfc/qnearfieldmanager_neard.cpp
+++ b/src/nfc/qnearfieldmanager_neard.cpp
@@ -39,33 +39,41 @@
**
****************************************************************************/
-#include "qnearfieldmanager_neard.h"
-#include "neard/adapter_p.h"
-#include "neard/manager_p.h"
+#include "qnearfieldmanager_neard_p.h"
#include "qnearfieldtarget_neard_p.h"
+#include "neard/manager_p.h"
+#include "neard/adapter_p.h"
+
QT_BEGIN_NAMESPACE
-// TODO We need a constructor that lets us select a adapter
+// TODO We need a constructor that lets us select an adapter
QNearFieldManagerPrivateImpl::QNearFieldManagerPrivateImpl()
- : m_adapter(0)
+ : QNearFieldManagerPrivate(), m_adapter(0), m_manager(0)
{
- // Look for a NFC adapter
- OrgNeardManagerInterface manager(QStringLiteral("org.neard"), QStringLiteral("/"),
- QDBusConnection::systemBus());
- QDBusPendingReply<QVariantMap> reply = manager.GetProperties();
+ m_manager = new OrgNeardManagerInterface(QStringLiteral("org.neard"), QStringLiteral("/"),
+ QDBusConnection::systemBus(), this);
+ if (!m_manager->isValid()) {
+ qDebug() << "Could not connect to manager" << "Neard daemon running?";
+ return;
+ }
+
+ QDBusPendingReply<QVariantMap> reply = m_manager->GetProperties();
reply.waitForFinished();
- if (reply.isError())
- qDebug() << "Error getting manager properties." << "Neard daemon running?";
+ if (reply.isError()) {
+ qDebug() << "Error getting manager properties.";
+ return;
+ }
+ // Now we check if the adapter still exists (it might have been unplugged)
const QDBusArgument &paths = reply.value().value(QStringLiteral("Adapters")).value<QDBusArgument>();
paths.beginArray();
while (!paths.atEnd()) {
QDBusObjectPath path;
paths >> path;
+ // Select the first adapter
m_adapterPath = path.path();
- //qDebug() << "path is" << m_adapterPath;
break;
}
paths.endArray();
@@ -78,23 +86,31 @@ QNearFieldManagerPrivateImpl::~QNearFieldManagerPrivateImpl()
bool QNearFieldManagerPrivateImpl::isAvailable() const
{
- OrgNeardManagerInterface manager(QStringLiteral("org.neard"), QStringLiteral("/"),
- QDBusConnection::systemBus());
- QDBusPendingReply<QVariantMap> reply = manager.GetProperties();
+ if (!m_manager->isValid() || m_adapterPath.isNull()) {
+ return false;
+ }
+
+ QDBusPendingReply<QVariantMap> reply = m_manager->GetProperties();
reply.waitForFinished();
- if (reply.isError())
- qDebug() << "Error getting manager properties." << "Neard daemon running?";
+ if (reply.isError()) {
+ qDebug() << "Error getting manager properties.";
+ return false;
+ }
- QDBusArgument paths = reply.value().value(QStringLiteral("Adapters")).value<QDBusArgument>();
+ // Now we check if the adapter still exists (it might have been unplugged)
+ const QDBusArgument &paths = reply.value().value(QStringLiteral("Adapters")).value<QDBusArgument>();
paths.beginArray();
while (!paths.atEnd()) {
QDBusObjectPath path;
paths >> path;
- //Check if the adapter exists
- if (path.path() == m_adapterPath)
+ // Check if the adapter exists
+ if (path.path() == m_adapterPath) {
+ paths.endArray();
return true;
+ }
}
+ paths.endArray();
return false;
}
@@ -109,7 +125,7 @@ bool QNearFieldManagerPrivateImpl::startTargetDetection()
//qDebug() << "Constructing interface with path" << m_adapterPath;
m_adapter = new OrgNeardAdapterInterface(QStringLiteral("org.neard"), m_adapterPath,
- QDBusConnection::systemBus());
+ QDBusConnection::systemBus(), this);
{
QDBusPendingReply<QVariantMap> reply = m_adapter->GetProperties();
@@ -143,7 +159,9 @@ bool QNearFieldManagerPrivateImpl::startTargetDetection()
void QNearFieldManagerPrivateImpl::stopTargetDetection()
{
- //qDebug() << "Stop target detection";
+ if (!isAvailable())
+ return;
+
QDBusPendingReply<> reply = m_adapter->StopPollLoop();
reply.waitForFinished();
// TODO Should we really power down the adapter?
diff --git a/src/nfc/qnearfieldmanager_neard.h b/src/nfc/qnearfieldmanager_neard_p.h
index 1848d16a..4984a531 100644
--- a/src/nfc/qnearfieldmanager_neard.h
+++ b/src/nfc/qnearfieldmanager_neard_p.h
@@ -46,7 +46,11 @@
#include "qnearfieldmanager.h"
#include "qnearfieldtarget.h"
-#include "neard/adapter_p.h"
+#include <QDBusObjectPath>
+#include <QDBusVariant>
+
+class OrgNeardAdapterInterface;
+class OrgNeardManagerInterface;
QT_BEGIN_NAMESPACE
@@ -81,6 +85,8 @@ private Q_SLOTS:
private:
QString m_adapterPath;
OrgNeardAdapterInterface *m_adapter;
+ OrgNeardManagerInterface *m_manager;
+
};
QT_END_NAMESPACE