예제 #1
0
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();
}
예제 #2
0
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);

}
예제 #3
0
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));
    }
}
예제 #4
0
void UriRecordEditor::setRecord(const QNdefNfcUriRecord &uriRecord)
{
    ui->uri->setText(uriRecord.uri().toString());
}