diff options
author | Fabian Bumberger <fbumberger@rim.com> | 2014-06-25 22:56:56 +0200 |
---|---|---|
committer | Fabian Bumberger <fbumberger@rim.com> | 2014-07-02 12:42:02 +0200 |
commit | 0ea4cc4d1e84b01e589e5e19f0323a2c80503219 (patch) | |
tree | 18f007937f93c1eb05495e24562cefa790ba5e15 /src | |
parent | de847406f71a1f5a8bf24b2b3fc99471e62c2901 (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.pro | 19 | ||||
-rw-r--r-- | src/nfc/qnearfieldmanager.cpp | 2 | ||||
-rw-r--r-- | src/nfc/qnearfieldmanager_neard.cpp | 62 | ||||
-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 |