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.h

Committer:
giovannivisentini
Date:
2015-12-01
Revision:
4:eaf6c49a86e4
Parent:
1:a0eeb478a45a
Child:
6:739e3211749d

File content as of revision 4:eaf6c49a86e4:

/*
 * Message.h
 *
 *  Created on: Nov 6, 2015
 *      Author: giovanni visentini
 */

#ifndef NDEFLIB_MESSAGE_H_
#define NDEFLIB_MESSAGE_H_

#include <vector>

#include "Record.h"

namespace NDefLib {

/**
 * class containing a set of NDefRecord
 */
class Message {
public:

	Message() {	}

	/**
	 * add a ndef record to this message
	 * @param r record to add
	 */
	void addRecord(Record *r) {
		mRecords.push_back(r);
	}

	/**
	 * add all the record in the list to this message
	 * @param addList list of record to add
	 */
	void addRecords(const std::vector<Record*> &addList) {
		mRecords.insert(mRecords.end(), addList.begin(), addList.end());
	}

	/**
	 * get the specific record contained by this message, or NULL if itn't a valid index
	 * @param index record index
	 * @return if present a record otherwise NULL
	 */
	Record* operator[](const uint32_t index){
		if (index > mRecords.size())
			return NULL;
		return mRecords[index];
	}

	/**
	 * get the number of records in this message
	 * @return number of record in this message
	 */
	uint32_t getNRecords() const {
		return mRecords.size();
	}

	/**
	 * length in byte needed for write this message
	 * @return number of byte needed for with this message
	 */
	uint16_t getByteLength() const;

	/**
	 * write this message in the buffer
	 * @par the first 2 byte are the NDEF message length
	 * @param[out] buffer buffer where write this message
	 * @return number of bytes wrote
	 */
	uint16_t write(uint8_t *buffer) const;

	/**
	 * try to rebuild all the record from a message buffer
	 * @par I assume that you already read the NDEF length, so the buffer doesn't contain it
	 * @param buffer buffer containing the message record
	 * @param bufferLength buffer length
	 * @param message message where the function will add the read record
	 */
	static void parseMessage(const uint8_t * const buffer,
			const uint8_t bufferLength, Message *message);

	virtual ~Message() {
	}

private:
	/**
	 * list of record contained by this message
	 */
	std::vector<Record*> mRecords;
};

} /* namespace NDefLib */

#endif /* NDEFLIB_MESSAGE_H_ */