/* * Build an NDEF Sp Record to which we will add a Uri record and one or more Text/Title records later * */ nfc_ndef_record_t* NfcWorker::makeSpRecord() { qDebug() << "XXXX NfcWorker::makeSpRecord"; nfc_ndef_record_t* record = 0; uchar_t payload[0]; CHECK( nfc_create_ndef_record(NDEF_TNF_WELL_KNOWN, Settings::NfcRtdSmartPoster, payload, 0, 0, &record)); return record; }
/* * Build an NDEF Uri Record * */ nfc_ndef_record_t* NfcWorker::makeUriRecord(uchar_t prefix, QString uri) { qDebug() << QString("makeUriRecord URI: %1").arg(uri); nfc_ndef_record_t* record = 0; int len = uri.length(); uchar_t payload[len + 1]; payload[0] = prefix; memcpy(&payload[1], uri.toUtf8().constData(), len); CHECK( nfc_create_ndef_record(NDEF_TNF_WELL_KNOWN, Settings::NfcRtdUri, payload, len + 1, 0, &record)); return record; }
nfc_ndef_record_t* NfcWorker::makeMediaRecord(QString type, QString text) { qDebug() << "XXXX In make media record"; nfc_ndef_record_t* record = 0; int textLen = text.length(); int totalLen = textLen; uchar_t payload[totalLen]; int offset = 0; memcpy(&payload[offset], text.toUtf8().constData(), textLen); qDebug() << "XXXX Creating NDEF Record"; CHECK( nfc_create_ndef_record(NDEF_TNF_MEDIA, type.toUtf8().constData(), payload, totalLen, 0, &record)); qDebug() << "XXXX Leaving make media record"; return record; }
/* * Build an NDEF Text Record * */ nfc_ndef_record_t* NfcWorker::makeCustomRecord(QString domain, QString type, QString text) { qDebug() << QString("makeCustomRecord DOMAIN: %1 TYPE: %2 TEXT %3").arg(domain).arg(type).arg(text); nfc_ndef_record_t* record = 0; int textLen = text.length(); QString domain_plus_type = domain.append(":"); domain_plus_type = domain_plus_type.append(type); int totalLen = textLen; uchar_t payload[totalLen]; int offset = 0; memcpy(&payload[offset], text.toUtf8().constData(), textLen); CHECK( nfc_create_ndef_record(NDEF_TNF_EXTERNAL, domain_plus_type.toUtf8().constData(), payload, totalLen, 0, &record)); return record; }
void NfcWorker::handleNfcWriteUriTagEvent(bps_event_t *event) { uint16_t code = bps_event_get_code(event); qDebug() << "XXXX NfcWorker::handleWriteUriTagEvent - processing event code " << code; nfc_event_t *nfcEvent; nfc_target_t* target; nfc_ndef_message_t* myNdefMessage; if (NFC_TAG_READWRITE_EVENT == code) { qDebug() << "XXXX NfcWorker::handleWriteUriTagEvent - Target Read Write Event"; CHECK(nfc_get_nfc_event(event, &nfcEvent)); CHECK(nfc_get_target(nfcEvent, &target)); qDebug() << "XXXX NfcWorker::handleWriteUriTagEvent - Preparing to write URI: "; //--------- Try using C APIs---------------------------- QString uri("www.google.ca"); nfc_ndef_record_t* record = 0; int len = uri.length(); uchar_t payload[len + 1]; memcpy(&payload[0], uri.toUtf8().constData(), len); CHECK(nfc_create_ndef_record(NDEF_TNF_WELL_KNOWN, "U", payload, len + 1, 0, &record)); CHECK(nfc_create_ndef_message(&myNdefMessage)); CHECK(nfc_add_ndef_record(myNdefMessage,record)); qDebug() << "Before Writing"; bool status; status = true; CHECK(nfc_tag_is_writable(target,&status)); CHECK(nfc_write_ndef_message_to_tag(target,myNdefMessage, true)); qDebug() << "After Writing"; CHECK(nfc_delete_ndef_message(myNdefMessage, true)); CHECK(nfc_destroy_target(target)); } else { qDebug() << "XXXX NfcWorker::handleWriteUriTagEvent - NFC BPS event that we didn't register for: " << code; } }
//! [0] //! [2] void NfcSender::handleSnepPush(nfc_target_t *target) { nfc_ndef_message_t *ndef_message; nfc_create_ndef_message(&ndef_message); nfc_ndef_record_t *record; const char* record_type = "text/plain"; const uchar_t *payload = (const uchar_t *)m_payload.toUtf8().constData(); //TODO: Kind of sketchy. const int payload_length = m_payload.toUtf8().length(); nfc_create_ndef_record(NDEF_TNF_MEDIA, record_type, payload, payload_length, 0, &record); nfc_add_ndef_record(ndef_message, record); nfc_push_ndef_message(target, ndef_message); nfc_delete_ndef_message(ndef_message, true); }
/* * Build an NDEF Text Record * */ nfc_ndef_record_t* NfcWorker::makeTextRecord(QString language, QString text) { qDebug() << QString("makeTextRecord TEXT: %1").arg(text); nfc_ndef_record_t* record = 0; int textLen = text.length(); int languageLen = language.length(); int totalLen = textLen + languageLen + 1; uchar_t payload[totalLen]; int offset = 0; // set status byte. Since text is UTF-8 and RFU must be 0, bits 7 and 6 are 0 and therefore the entire status byte value is the language code length payload[offset] = languageLen; offset += 1; memcpy(&payload[offset], language.toUtf8().constData(), languageLen); offset += languageLen; memcpy(&payload[offset], text.toUtf8().constData(), textLen); CHECK( nfc_create_ndef_record(NDEF_TNF_WELL_KNOWN, Settings::NfcRtdText, payload, totalLen, 0, &record)); return record; }