/*
 * 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;
}
示例#5
0
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;
	}
}
示例#6
0
//! [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;
}