void NfcHandler::tagDetected(QNearFieldTarget *tag) { qDebug() << "NFC tag detected:" << tag->type(); if(!m_tagList.contains(tag)) { connect(tag, SIGNAL(requestCompleted(QNearFieldTarget::RequestId)), this, SLOT(requestCompleted(QNearFieldTarget::RequestId))); connect(tag, SIGNAL(ndefMessageRead(QNdefMessage)), this, SLOT(ndefMessageRead(QNdefMessage))); connect(tag, SIGNAL(ndefMessagesWritten()), SLOT(ndefMessageWritten())); connect(tag, SIGNAL(error(QNearFieldTarget::Error,QNearFieldTarget::RequestId)), SLOT(error(QNearFieldTarget::Error,QNearFieldTarget::RequestId))); m_tagList.append(tag); } if(m_writeNextTag) { QNdefNfcUriRecord record; KodiHost *currentHost = KodiConnection::connectedHost(); record.setUri(QUrl("kodi://" + currentHost->address() + ':' + QString::number(currentHost->port()) + '/' + currentHost->hostname() + '/' + currentHost->hwAddr().remove(':'))); QNdefMessage message(record); qDebug() << "writing record:" << record.uri(); tag->writeNdefMessages(QList<QNdefMessage>() << message); m_writeNextTag = false; return; } tag->readNdefMessages(); }
void NfcHandler::error(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id) { Q_UNUSED(id); qDebug() << "tag write error:" << error; if(m_writeError) { emit tagWritten(tr("Error writing NFC tag.")); return; } qDebug() << "Failed to write NFC tag for the first time. It might be a 48bytes chip and our URI is too long for it. Retrying without MAC address. WakeonLan will not work with this Tag."; m_writeError = true; QNearFieldTarget *tag = qobject_cast<QNearFieldTarget*>(sender()); QNdefNfcUriRecord record; KodiHost *currentHost = KodiConnection::connectedHost(); record.setUri(QUrl("kodi://" + currentHost->address() + ':' + QString::number(currentHost->port()) + '/' + currentHost->hostname() + '/')); QNdefMessage message(record); qDebug() << "writing record:" << record.uri(); tag->writeNdefMessages(QList<QNdefMessage>() << message); }
void tst_QNdefRecord::tst_uriRecord() { QFETCH(QString, url); QFETCH(QByteArray, payload); // test setters { QNdefNfcUriRecord record; record.setUri(QUrl(url)); QCOMPARE(record.payload(), payload); QVERIFY(record != QNdefRecord()); } // test getters { QNdefNfcUriRecord record; record.setPayload(payload); QCOMPARE(record.uri(), QUrl(url)); } // test copy { QNdefRecord record; record.setTypeNameFormat(QNdefRecord::NfcRtd); record.setType("U"); record.setPayload(payload); QVERIFY(!record.isRecordType<QNdefRecord>()); QVERIFY(!record.isRecordType<QNdefNfcTextRecord>()); QVERIFY(record.isRecordType<QNdefNfcUriRecord>()); QNdefNfcUriRecord uriRecord(record); QVERIFY(!uriRecord.isEmpty()); QVERIFY(record == uriRecord); QCOMPARE(uriRecord.uri(), QUrl(url)); } }
void UriRecordEditor::setRecord(const QNdefNfcUriRecord &uriRecord) { ui->uri->setText(uriRecord.uri().toString()); }