Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qnearfieldtarget_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
5#include "qndefmessage.h"
6#include <QtCore/QLoggingCategory>
7
8QT_BEGIN_NAMESPACE
9
10Q_DECLARE_LOGGING_CATEGORY(QT_NFC_PCSC)
11
12/*
13 Construct QNearFieldTargetPrivateImpl instance.
14
15 This object communicates with a QPcscCard object that lives inside the
16 worker thread via signal-slot mechanism.
17*/
18QNearFieldTargetPrivateImpl::QNearFieldTargetPrivateImpl(
19 const QByteArray &uid, QNearFieldTarget::AccessMethods accessMethods, int maxInputLength,
20 QObject *parent)
21 : QNearFieldTargetPrivate(parent),
22 m_uid(uid),
23 m_accessMethods(accessMethods),
24 m_maxInputLength(maxInputLength)
25{
26 qCDebug(QT_NFC_PCSC) << "New card with UID" << m_uid.toHex(':');
27}
28
29QNearFieldTargetPrivateImpl::~QNearFieldTargetPrivateImpl()
30{
31 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
32}
33
34QByteArray QNearFieldTargetPrivateImpl::uid() const
35{
36 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
37 return m_uid;
38}
39
40QNearFieldTarget::Type QNearFieldTargetPrivateImpl::type() const
41{
42 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
43
44 // Currently NDEF access is only supported for Type 4 tags
45 if (m_accessMethods & QNearFieldTarget::NdefAccess)
46 return QNearFieldTarget::NfcTagType4;
47
48 return QNearFieldTarget::ProprietaryTag;
49}
50
51QNearFieldTarget::AccessMethods QNearFieldTargetPrivateImpl::accessMethods() const
52{
53 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
54 return m_accessMethods;
55}
56
57bool QNearFieldTargetPrivateImpl::disconnect()
58{
59 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
60
61 if (!m_connected || !m_isValid)
62 return false;
63
64 Q_EMIT disconnectRequest();
65 return true;
66}
67
68int QNearFieldTargetPrivateImpl::maxCommandLength() const
69{
70 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
71 return m_maxInputLength;
72}
73
74void QNearFieldTargetPrivateImpl::onRequestCompleted(const QNearFieldTarget::RequestId &request,
75 QNearFieldTarget::Error reason,
76 const QVariant &result)
77{
78 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
79
80 if (reason == QNearFieldTarget::NoError)
81 setResponseForRequest(request, result);
82 else
83 reportError(reason, request);
84}
85
86void QNearFieldTargetPrivateImpl::onNdefMessageRead(const QNdefMessage &message)
87{
88 Q_EMIT ndefMessageRead(message);
89}
90
91QNearFieldTarget::RequestId QNearFieldTargetPrivateImpl::sendCommand(const QByteArray &command)
92{
93 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
94
95 if (!m_isValid)
96 return QNearFieldTarget::RequestId(nullptr);
97
98 m_connected = true;
99
100 QNearFieldTarget::RequestId reqId(new QNearFieldTarget::RequestIdPrivate);
101 Q_EMIT sendCommandRequest(reqId, command);
102
103 return reqId;
104}
105
106QNearFieldTarget::RequestId QNearFieldTargetPrivateImpl::readNdefMessages()
107{
108 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
109
110 if (!m_isValid)
111 return QNearFieldTarget::RequestId(nullptr);
112
113 m_connected = true;
114
115 QNearFieldTarget::RequestId reqId(new QNearFieldTarget::RequestIdPrivate);
116 Q_EMIT readNdefMessagesRequest(reqId);
117
118 return reqId;
119}
120
121QNearFieldTarget::RequestId
122QNearFieldTargetPrivateImpl::writeNdefMessages(const QList<QNdefMessage> &messages)
123{
124 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
125
126 if (!m_isValid)
127 return QNearFieldTarget::RequestId(nullptr);
128
129 m_connected = true;
130
131 QNearFieldTarget::RequestId reqId(new QNearFieldTarget::RequestIdPrivate);
132 Q_EMIT writeNdefMessagesRequest(reqId, messages);
133
134 return reqId;
135}
136
137void QNearFieldTargetPrivateImpl::onDisconnected()
138{
139 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
140
141 if (!m_connected)
142 return;
143
144 m_connected = false;
145
146 Q_EMIT disconnected();
147}
148
149void QNearFieldTargetPrivateImpl::onInvalidated()
150{
151 qCDebug(QT_NFC_PCSC) << Q_FUNC_INFO;
152
153 if (!m_isValid)
154 return;
155
156 m_isValid = false;
157
158 Q_EMIT targetLost(this);
159}
160
161QT_END_NAMESPACE