예제 #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();
}
static QNdefMessage _bookmarkToMessage(QString url,
                                       QString name,
                                       QString icon)
{
    (void) icon;

    QNdefMessage message;

    QNdefNfcUriRecord u;
    u.setUri(url);

    if (name != "") {
        SmartPosterRecord sp;

        sp.setUri(u);

        QNdefNfcTextRecord t;
        t.setText(name);
        t.setLocale(Util::currentLanguageCode());

        QList<QNdefNfcTextRecord> ts;
        ts << t;
        sp.setTitles(ts);

        message << sp;
    } else {
        message << u;
    }

    return message;
}
예제 #3
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);

}
예제 #4
0
QNdefNfcUriRecord UriRecordEditor::record() const
{
    QNdefNfcUriRecord record;

    record.setUri(ui->uri->text());

    return record;
}
예제 #5
0
QNdefNfcUriRecord* NfcModelToNdef::convertUriFromModel(const int startIndex, int& endIndex, bool expectHeader)
{
    QNdefNfcUriRecord* newRecord = new QNdefNfcUriRecord();
    int curIndex = startIndex;
    if (expectHeader) {
        if (m_recordItems[startIndex]->messageType() != NfcTypes::MsgUri ||
                m_recordItems[startIndex]->recordContent() != NfcTypes::RecordHeader) {
            return newRecord;
        }
        // Start at the next item after the header
        curIndex = startIndex + 1;
    }
    if (curIndex >= m_recordItems.size())
        return newRecord;
    NfcRecordItem* curItem = m_recordItems[curIndex];
    newRecord->setUri(QUrl(curItem->currentText()));
    endIndex = curIndex + 1;
    return newRecord;
}
예제 #6
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));
    }
}
예제 #7
0
void UriRecordEditor::setRecord(const QNdefNfcUriRecord &uriRecord)
{
    ui->uri->setText(uriRecord.uri().toString());
}