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:
0:04b82ae7aa43
Child:
1:a0eeb478a45a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Message.cpp	Thu Nov 19 08:49:47 2015 +0000
@@ -0,0 +1,81 @@
+/*
+ * Message.cpp
+ *
+ *  Created on: Nov 6, 2015
+ *      Author: giovanni visentini
+ */
+
+#include <cstdlib>
+#include "NDefLib/Message.h"
+#include "RecordType/EmptyRecord.h"
+#include "RecordType/RecordText.h"
+
+namespace NDefLib {
+
+uint16_t Message::getByteLenght()const{
+	uint16_t lenght=2; //length size
+
+	if(mRecords.size()==0)
+		return lenght+EmptyRecord().getByteLenght();
+
+	std::vector<Record*>::const_iterator it = mRecords.begin();
+	const std::vector<Record*>::const_iterator end = mRecords.end();
+
+	for(;it!=end;++it){
+		lenght+= (*it)->getByteLenght();
+	}//for
+
+	return lenght;
+}//getByteLenght
+
+uint16_t Message::write(uint8_t *buffer){
+
+	const uint16_t length =getByteLenght()-2;
+	uint16_t offset=0;
+	buffer[offset++]=(uint8_t)((length & 0xFF00)>>8);
+	buffer[offset++]=(uint8_t)((length & 0x00FF));
+
+	const uint32_t nRecord = mRecords.size();
+
+	if(mRecords.size()==0){
+		offset += EmptyRecord().write(buffer+offset);
+		return offset;
+	}//else
+
+	for(uint32_t i=0;i<nRecord; i++){
+		Record *r = mRecords[i];
+
+		r->setAsMiddleRecord();
+		if(i==0)
+			r->setAsFirstRecord();
+		if(i==nRecord-1)
+			r->setAsLastRecord();
+
+		offset+= r->write(buffer+offset);
+	}//for
+
+	return offset;
+}//write
+
+void Message::parseMessage(uint8_t *rawNdefFile,std::vector<Record*> *parsedRecords){
+
+	//const uint16_t length = (rawNdefFile[0]<<8 | rawNdefFile[1]);
+	//skip the message length info
+	uint16_t offset=2;
+	Record *r;
+	do{
+		r = RecordText::parse(rawNdefFile+offset);
+		if(r==NULL){
+
+
+
+		}//else
+
+		offset += r->getByteLenght();
+		parsedRecords->push_back(r);
+	}while(!r->isLastRecord());
+
+}
+
+
+} /* namespace NDefLib */