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
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.
Diff: RecordType/RecordVCard.cpp
- 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****/