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:
2:760e36ba9c23
Parent:
1:a0eeb478a45a
Child:
4:eaf6c49a86e4
--- a/RecordType/RecordMimeType.cpp	Tue Nov 24 14:33:06 2015 +0000
+++ b/RecordType/RecordMimeType.cpp	Thu Nov 26 09:04:44 2015 +0000
@@ -7,18 +7,28 @@
 
 #include <cstring>
 #include "RecordMimeType.h"
+#include "RecordVCard.h"
 
 namespace NDefLib {
 
+void RecordMimeType::initializeHeaderData(){
+	mRecordHeader.setFNT(RecordHeader::Mime_media_type);
+	mRecordHeader.setTypeLength(mMimeType.size());
+	mRecordHeader.setPlayloadLenght(mDataLenght);
+}
+
 RecordMimeType::RecordMimeType(const std::string &mimeType,const uint8_t *data,uint32_t nDataLenght):
 	mMimeType(mimeType),mDataLenght(nDataLenght),mData(new uint8_t[mDataLenght]){
 
 	std::memcpy(mData,data,mDataLenght);
+	initializeHeaderData();
+}
 
-	mRecordHeader.setFNT(RecordHeader::Mime_media_type);
-	mRecordHeader.setTypeLength(mMimeType.size());
-	mRecordHeader.setPlayloadLenght(mDataLenght);
+RecordMimeType::RecordMimeType(const std::string &mimeType,const std::string &data):
+	mMimeType(mimeType),mDataLenght(data.size()),mData(new uint8_t[mDataLenght]){
 
+	std::memcpy(mData,data.c_str(),mDataLenght);
+	initializeHeaderData();
 }
 
 uint16_t RecordMimeType::write(uint8_t *buffer){
@@ -37,6 +47,11 @@
 	if(header.getFNT()!=RecordHeader::Mime_media_type){
 		return NULL;
 	}//else
+	//check if it is a know subtype
+	RecordMimeType *r = RecordVCard::parse(header,buffer);
+	if(r!=NULL)
+		return r;
+
 	uint32_t dataOffset = offset+header.getTypeLenght();
 	return new RecordMimeType(std::string((const char*)buffer+offset,
 				header.getTypeLenght()),buffer+dataOffset,header.getPlayloadLenght());