diff options
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 |