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-11-24
- Revision:
- 1:a0eeb478a45a
- Parent:
- 0:04b82ae7aa43
- Child:
- 4:eaf6c49a86e4
File content as of revision 1:a0eeb478a45a:
/* * 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::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 { 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(const uint8_t *const rawNdefFile, const uint8_t length,Message *msg){ uint16_t offset=0; Record *r; Record::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 */