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.
Message.cpp
- Committer:
- giovannivisentini
- Date:
- 2015-12-01
- Revision:
- 4:eaf6c49a86e4
- Parent:
- 1:a0eeb478a45a
- Child:
- 6:739e3211749d
File content as of revision 4:eaf6c49a86e4:
/* * Message.cpp * * Created on: Nov 6, 2015 * Author: giovanni visentini */ #include <cstdlib> #include "NDefLib/Message.h" #include "RecordType/EmptyRecord.h" #include "RecordType/RecordText.h" #include "RecordType/RecordAAR.h" #include "RecordType/RecordMimeType.h" #include "RecordType/RecordURI.h" namespace NDefLib { uint16_t Message::getByteLength() const { uint16_t lenght = 2; //length size if (mRecords.size() == 0) return lenght + EmptyRecord().getByteLength(); std::vector<Record*>::const_iterator it = mRecords.begin(); const std::vector<Record*>::const_iterator end = mRecords.end(); for (; it != end; ++it) { lenght += (*it)->getByteLength(); } //for return lenght; } //getByteLenght uint16_t Message::write(uint8_t *buffer) const { const uint16_t length = getByteLength() - 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(const uint8_t * const rawNdefFile, const uint8_t length, Message *msg) { uint16_t offset = 0; Record *r; RecordHeader header; do { const uint8_t headerLenght = header.loadHeader(rawNdefFile + offset); r = RecordText::parse(header, rawNdefFile + offset + headerLenght); if (r == NULL) r = RecordAAR::parse(header, rawNdefFile + offset + headerLenght); if (r == NULL) r = RecordMimeType::parse(header, rawNdefFile + offset + headerLenght); if (r == NULL) r = RecordURI::parse(header, rawNdefFile + offset + headerLenght); offset += header.getRecordLength(); msg->addRecord(r); } while (offset < length); } } /* namespace NDefLib */