Utility library to read and write Ndef messages from/to a Type4 NFC tag

Dependents:   NFC M2M_2016_STM32 MyongjiElec_capstone1 IDW01M1_Cloud_IBM ... more

Fork of NDefLib by ST Expansion SW Team

NDEF NFC library

This library provides an abstract API to create NDEF formatted messages and records and to read/write them from/to a Type4 NFC Tag.

Implementations

At the moment, the NDEF API is implemented by X_NUCLEO_NFC01A1 and X_NUCLEO_NFC02A1 Dynamic NFC Tag libraries respectively driving the X-NUCLEO-NFC01A1 and X-NUCLEO-NFC02A1 boards.

Revision:
20:31f727872290
Parent:
19:13d84b136a62
--- a/RecordType/RecordVCard.cpp	Fri Apr 28 12:13:51 2017 +0000
+++ b/RecordType/RecordVCard.cpp	Wed Jul 12 12:33:42 2017 +0000
@@ -42,27 +42,29 @@
 const std::string RecordVCard::sEmptyTagContent("");
 const std::string RecordVCard::sVcardMimeType("text/vcard");
 const std::string RecordVCard::sStartVCardTag("BEGIN:VCARD\nVERSION:3.0\n");
-const std::string RecordVCard::sStartFieldTag[] =
-		{ "ADR:", "ADR;TYPE=home:", "ADR;TYPE=work:", "AGENT:", "BDAY:",
-				"CATEGORIES:", "EMAIL:", "EMAIL;TYPE=home:", "EMAIL;TYPE=work:",
-				"FN:", "GEO:", "IMPP:", "KEY;TYPE=PGP:",
-				"KEY;TYPE=PGP;ENCODING=B:","LOGO:", "LOGO;VALUE=uri:",
-				"LOGO;ENCODING=B;", "N:", "NICKNAME:", "NOTE:", "ORG:",
-				"PHOTO;VALUE=uri:", "PHOTO;ENCODING=B;", "REV:", "SOURCE:",
-				"TEL:", "TEL;TYPE=HOME:", "TEL;TYPE=WORK:", "TEL;TYPE=CELL:",
-				"TITLE:", "URL:", };
+const std::string RecordVCard::sStartFieldTag[] = {
+	"ADR:", "ADR;TYPE=home:", "ADR;TYPE=work:", "AGENT:", "BDAY:",
+	"CATEGORIES:", "EMAIL:", "EMAIL;TYPE=home:", "EMAIL;TYPE=work:",
+	"FN:", "GEO:", "IMPP:", "KEY;TYPE=PGP:",
+	"KEY;TYPE=PGP;ENCODING=B:","LOGO:", "LOGO;VALUE=uri:",
+	"LOGO;ENCODING=B;", "N:", "NICKNAME:", "NOTE:", "ORG:",
+	"PHOTO;VALUE=uri:", "PHOTO;ENCODING=B;", "REV:", "SOURCE:",
+	"TEL:", "TEL;TYPE=HOME:", "TEL;TYPE=WORK:", "TEL;TYPE=CELL:",
+	"TITLE:", "URL:"
+};
 
 const std::string RecordVCard::sEndFieldTag("\n");
 const std::string RecordVCard::sEndVCardTag("END:VCARD");
 
 RecordVCard::RecordVCard(const VCardInfo_t &info) :
-		RecordMimeType(sVcardMimeType), mCardInfo(info),mContentIsChange(true) {
+	RecordMimeType(sVcardMimeType), mCardInfo(info),mContentIsChange(true) {
 	update_content_info_string();
 }
 
 void RecordVCard::update_content_info_string() {
-	if(!mContentIsChange)
+	if (!mContentIsChange) {
 		return;
+	}
 
 	mCardInfoString = sStartVCardTag;
 
@@ -73,54 +75,48 @@
 		mCardInfoString += sStartFieldTag[it->first];
 		mCardInfoString += it->second;
 		mCardInfoString += sEndFieldTag;
-	} //for
+	}
 
 	mCardInfoString += sEndVCardTag;
 
 	set_mime_data_pointer((uint8_t*)mCardInfoString.data(),mCardInfoString.size());
 
 	mContentIsChange=false;
-
 }
 
-uint16_t RecordVCard::find_VCard_field_data_lenght(const std::string &content,
-		uint16_t offset) {
+uint16_t RecordVCard::find_VCard_field_data_lenght(const std::string &content, uint16_t offset) {
 	std::size_t pos = content.find(sEndFieldTag, offset);
 	if (pos == std::string::npos) { //if we don't find the end, lets consume all the content
 		return content.size() - offset;
-	} //else
+	}
 	return content.find(sEndFieldTag, offset) - offset;
-} //findVCardFieldDataLenght
+}
 
-int8_t RecordVCard::find_VCard_field_type(const std::string &content,
-		uint16_t offset) {
-	const uint32_t nFieldTag = sizeof(sStartFieldTag)
-			/ sizeof(sStartFieldTag[0]);
+int8_t RecordVCard::find_VCard_field_type(const std::string &content, uint16_t offset) {
+	const uint32_t nFieldTag = sizeof(sStartFieldTag) / sizeof(sStartFieldTag[0]);
 	for (uint32_t i = 0; i < nFieldTag; i++) {
 		if (content.find(sStartFieldTag[i], offset) != std::string::npos)
 			return i;
-	} //for
+	}
+
 	return -1;
-} //findVCardFieldType
+}
 
-RecordVCard* RecordVCard::parse(const RecordHeader &header,
-		const uint8_t* buffer) {
-	if (header.get_FNT() != RecordHeader::Mime_media_type
-			|| header.get_type_length() != sVcardMimeType.size()) {
+RecordVCard* RecordVCard::parse(const RecordHeader &header, const uint8_t* buffer) {
+	if (header.get_FNT() != RecordHeader::Mime_media_type || header.get_type_length() != sVcardMimeType.size()) {
 		return NULL;
-	} //else
-	if (sVcardMimeType.compare(0, sVcardMimeType.size(), (const char*) buffer,
-			sVcardMimeType.size()) != 0) {
+	}
+	if (sVcardMimeType.compare(0, sVcardMimeType.size(), (const char*) buffer, sVcardMimeType.size()) != 0) {
 		return NULL;
 	}
 	buffer += header.get_type_length();
 	//we are at the start of the vcard data
-	if (sStartVCardTag.compare(0, sStartVCardTag.size(), (const char*) (buffer),
-			sStartVCardTag.size()) != 0)
+	if (sStartVCardTag.compare(0, sStartVCardTag.size(), (const char*) (buffer), sStartVCardTag.size()) != 0) {
 		return NULL;
+	}
 	//the version is ok
 	const std::string vCardContent((const char*) buffer + sStartVCardTag.size(),
-			header.get_payload_length() - sStartVCardTag.size());
+		header.get_payload_length() - sStartVCardTag.size());
 	uint16_t offset = 0;
 	buffer += sStartVCardTag.size(); // for debug
 	VCardInfo_t info;
@@ -131,14 +127,12 @@
 			const VCardField_t fieldType = (VCardField_t) type;
 			offset += sStartFieldTag[fieldType].size(); // skip the tag name
 			//search the tag size
-			const uint16_t length = find_VCard_field_data_lenght(vCardContent,
-					offset);
+			const uint16_t length = find_VCard_field_data_lenght(vCardContent, offset);
 			info[fieldType] = vCardContent.substr(offset, length);
 			offset += length + sEndFieldTag.size();
 		} else {
 			//unknow field, skip until next one
-			offset += find_VCard_field_data_lenght(vCardContent, offset)
-					+ sEndFieldTag.size();
+			offset += find_VCard_field_data_lenght(vCardContent, offset) + sEndFieldTag.size();
 		}
 
 	} while (offset < vCardContent.size());
@@ -147,3 +141,6 @@
 }
 
 } /* namespace NDefLib */
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/