Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qnearfieldmanager_pcsc.cpp
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
7#include "pcsc/qpcsccard_p.h"
8#include <QtCore/QLoggingCategory>
9#include <QtCore/QThread>
10
12
13using namespace Qt::StringLiterals;
14
16
17/*
18 Constructs a new near field manager private implementation.
19
20 This object creates a worker thread with an instance of QPcscManager in
21 it. All the communication with QPcscManager is done using signal-slot
22 mechanism.
23*/
25{
26 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
27
28 m_worker = new QPcscManager;
29 m_workerThread = new QThread(this);
30 m_workerThread->setObjectName(u"QtNfcThread"_s);
31 m_worker->moveToThread(m_workerThread);
32
33 connect(m_worker, &QPcscManager::cardInserted, this,
39
40 m_workerThread->start();
41}
42
43/*
44 Destroys the near field manager private implementation.
45*/
47{
48 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
49
50 // Destroy the worker. It calls QThread::quit() on the working thread in
51 // its destructor.
53 m_workerThread->wait();
54}
55
57{
58 return true;
59}
60
62{
63 switch (accessMethod) {
66 return true;
67 default:
68 return false;
69 }
70}
71
73{
74 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
75
77
78 return true;
79}
80
82{
84
85 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
86
88}
89
90/*
91 Invoked when the worker has detected a new card.
92
93 The worker will ensure that the card object remains valid until the manager
94 emits targetCreatedForCard() signal.
95*/
97 QNearFieldTarget::AccessMethods accessMethods,
98 int maxInputLength)
99{
100 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
101
102 auto priv = new QNearFieldTargetPrivateImpl(uid, accessMethods, maxInputLength, this);
103
113
115 &QNearFieldManagerPrivateImpl::onTargetLost);
116
123
124 auto target = new QNearFieldTarget(priv, this);
125
127
128 // Let the worker know that the card object can be deleted if it is no
129 // longer needed.
131}
132
133void QNearFieldManagerPrivateImpl::onTargetLost(QNearFieldTargetPrivate *target)
134{
135 Q_EMIT targetLost(target->q_ptr);
136}
137
138Q_LOGGING_CATEGORY(QT_NFC_PCSC, "qt.nfc.pcsc")
139
\inmodule QtCore
Definition qbytearray.h:57
bool isSupported(QNearFieldTarget::AccessMethod accessMethod) const override
bool startTargetDetection(QNearFieldTarget::AccessMethod accessMethod) override
void startTargetDetectionRequest(QNearFieldTarget::AccessMethod accessMethod)
void stopTargetDetection(const QString &errorMessage) override
void onCardInserted(QPcscCard *card, const QByteArray &uid, QNearFieldTarget::AccessMethods accessMethods, int maxInputLength)
void targetDetected(QNearFieldTarget *target)
void targetLost(QNearFieldTarget *target)
void onRequestCompleted(const QNearFieldTarget::RequestId &request, QNearFieldTarget::Error reason, const QVariant &result)
void targetLost(QNearFieldTargetPrivateImpl *target)
void onNdefMessageRead(const QNdefMessage &message)
void writeNdefMessagesRequest(const QNearFieldTarget::RequestId &request, const QList< QNdefMessage > &messages)
void sendCommandRequest(const QNearFieldTarget::RequestId &request, const QByteArray &command)
void readNdefMessagesRequest(const QNearFieldTarget::RequestId &request)
The QNearFieldTarget class provides an interface for communicating with a target device.
AccessMethod
This enum describes the access methods a near field target supports.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
bool moveToThread(QThread *thread QT6_DECL_NEW_OVERLOAD_TAIL)
Changes the thread affinity for this object and its children and returns true on success.
Definition qobject.cpp:1643
Q_WEAK_OVERLOAD void setObjectName(const QString &name)
Sets the object's name to name.
Definition qobject.h:127
void destroyed(QObject *=nullptr)
This signal is emitted immediately before the object obj is destroyed, after any instances of QPointe...
void deleteLater()
\threadsafe
Definition qobject.cpp:2435
void onReadNdefMessagesRequest(const QNearFieldTarget::RequestId &request)
void onDisconnectRequest()
void requestCompleted(const QNearFieldTarget::RequestId &request, QNearFieldTarget::Error reason, const QVariant &result)
void disconnected()
void onTargetDestroyed()
void onWriteNdefMessagesRequest(const QNearFieldTarget::RequestId &request, const QList< QNdefMessage > &messages)
void onSendCommandRequest(const QNearFieldTarget::RequestId &request, const QByteArray &command)
void ndefMessageRead(const QNdefMessage &message)
void invalidated()
Q_INVOKABLE void enableAutodelete()
void onStartTargetDetectionRequest(QNearFieldTarget::AccessMethod accessMethod)
void onStopTargetDetectionRequest()
void cardInserted(QPcscCard *card, const QByteArray &uid, QNearFieldTarget::AccessMethods accessMethods, int maxInputLength)
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
void start(Priority=InheritPriority)
Definition qthread.cpp:996
bool wait(QDeadlineTimer deadline=QDeadlineTimer(QDeadlineTimer::Forever))
Definition qthread.cpp:1023
Combined button and popup list for selecting options.
@ QueuedConnection
#define Q_FUNC_INFO
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
#define Q_DECLARE_LOGGING_CATEGORY(name)
static const QMetaObjectPrivate * priv(const uint *data)
GLenum target
#define Q_EMIT
#define Q_UNUSED(x)
static QString errorMessage(QUrlPrivate::ErrorCode errorCode, const QString &errorSource, qsizetype errorPosition)
Definition qurl.cpp:3517
static bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType, QGenericReturnArgument ret, QGenericArgument val0=QGenericArgument(nullptr), QGenericArgument val1=QGenericArgument(), QGenericArgument val2=QGenericArgument(), QGenericArgument val3=QGenericArgument(), QGenericArgument val4=QGenericArgument(), QGenericArgument val5=QGenericArgument(), QGenericArgument val6=QGenericArgument(), QGenericArgument val7=QGenericArgument(), QGenericArgument val8=QGenericArgument(), QGenericArgument val9=QGenericArgument())
\threadsafe This is an overloaded member function, provided for convenience. It differs from the abov...