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.

Message.cpp

Committer:
giovannivisentini
Date:
2015-11-19
Revision:
0:04b82ae7aa43
Child:
1:a0eeb478a45a

File content as of revision 0:04b82ae7aa43:

/*
 * 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 */