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.
Diff: Message.cpp
- 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 */