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.

Committer:
giovannivisentini
Date:
Tue Dec 01 08:30:27 2015 +0000
Revision:
4:eaf6c49a86e4
Parent:
2:760e36ba9c23
Child:
6:739e3211749d
add the possibility to change the record content + add doc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giovannivisentini 0:04b82ae7aa43 1 /*
giovannivisentini 0:04b82ae7aa43 2 * Record.h
giovannivisentini 0:04b82ae7aa43 3 *
giovannivisentini 0:04b82ae7aa43 4 * Created on: Nov 6, 2015
giovannivisentini 0:04b82ae7aa43 5 * Author: giovanni visentini
giovannivisentini 0:04b82ae7aa43 6 */
giovannivisentini 0:04b82ae7aa43 7
giovannivisentini 0:04b82ae7aa43 8 #ifndef NDEFLIB_RECORD_H_
giovannivisentini 0:04b82ae7aa43 9 #define NDEFLIB_RECORD_H_
giovannivisentini 0:04b82ae7aa43 10 #include <stdint.h>
giovannivisentini 0:04b82ae7aa43 11
giovannivisentini 4:eaf6c49a86e4 12 #include "RecordHeader.h"
giovannivisentini 4:eaf6c49a86e4 13
giovannivisentini 0:04b82ae7aa43 14 namespace NDefLib {
giovannivisentini 0:04b82ae7aa43 15
giovannivisentini 4:eaf6c49a86e4 16 /**
giovannivisentini 4:eaf6c49a86e4 17 * Base class for a NDefRecord
giovannivisentini 4:eaf6c49a86e4 18 * @see NFC Data Exchange Format (NDEF) Technical Specification NDEF 1.0
giovannivisentini 4:eaf6c49a86e4 19 */
giovannivisentini 0:04b82ae7aa43 20 class Record {
giovannivisentini 0:04b82ae7aa43 21 public:
giovannivisentini 0:04b82ae7aa43 22
giovannivisentini 4:eaf6c49a86e4 23 /**
giovannivisentini 4:eaf6c49a86e4 24 * enum used for identify the record type
giovannivisentini 4:eaf6c49a86e4 25 */
giovannivisentini 4:eaf6c49a86e4 26 typedef enum {
giovannivisentini 4:eaf6c49a86e4 27 TYPE_UNKNOWN, //!< UNKNOWN record
giovannivisentini 4:eaf6c49a86e4 28 TYPE_TEXT, //!< TEXT
giovannivisentini 4:eaf6c49a86e4 29 TYPE_AAR, //!< Android Archive record
giovannivisentini 4:eaf6c49a86e4 30 TYPE_MIME, //!< generic MIME type
giovannivisentini 4:eaf6c49a86e4 31 TYPE_URI, //!< generic URI
giovannivisentini 4:eaf6c49a86e4 32 TYPE_URI_MAIL, //!< Email URI record
giovannivisentini 4:eaf6c49a86e4 33 TYPE_URI_SMS, //!< SMS URI record
giovannivisentini 4:eaf6c49a86e4 34 TYPE_URI_GEOLOCATION,//!< position URI record
giovannivisentini 4:eaf6c49a86e4 35 TYPE_MIME_VCARD //!< VCard record
giovannivisentini 4:eaf6c49a86e4 36 } RecordType_t;
giovannivisentini 0:04b82ae7aa43 37
giovannivisentini 4:eaf6c49a86e4 38 Record() {
giovannivisentini 4:eaf6c49a86e4 39 }
giovannivisentini 0:04b82ae7aa43 40
giovannivisentini 4:eaf6c49a86e4 41 /**
giovannivisentini 4:eaf6c49a86e4 42 * set the record as the first record in the message
giovannivisentini 4:eaf6c49a86e4 43 */
giovannivisentini 4:eaf6c49a86e4 44 void setAsFirstRecord() {
giovannivisentini 0:04b82ae7aa43 45 mRecordHeader.setMB(true);
giovannivisentini 0:04b82ae7aa43 46 }
giovannivisentini 0:04b82ae7aa43 47
giovannivisentini 4:eaf6c49a86e4 48 /**
giovannivisentini 4:eaf6c49a86e4 49 * set the record as the last record in the message
giovannivisentini 4:eaf6c49a86e4 50 */
giovannivisentini 4:eaf6c49a86e4 51 void setAsLastRecord() {
giovannivisentini 0:04b82ae7aa43 52 mRecordHeader.setME(true);
giovannivisentini 0:04b82ae7aa43 53 }
giovannivisentini 0:04b82ae7aa43 54
giovannivisentini 4:eaf6c49a86e4 55 /**
giovannivisentini 4:eaf6c49a86e4 56 * @return true if it is the last record in the message
giovannivisentini 4:eaf6c49a86e4 57 */
giovannivisentini 4:eaf6c49a86e4 58 bool isLastRecord() const {
giovannivisentini 0:04b82ae7aa43 59 return mRecordHeader.getME();
giovannivisentini 0:04b82ae7aa43 60 }
giovannivisentini 0:04b82ae7aa43 61
giovannivisentini 4:eaf6c49a86e4 62 /**
giovannivisentini 4:eaf6c49a86e4 63 * set the record as generic
giovannivisentini 4:eaf6c49a86e4 64 */
giovannivisentini 4:eaf6c49a86e4 65 void setAsMiddleRecord() {
giovannivisentini 0:04b82ae7aa43 66 mRecordHeader.setMB(false);
giovannivisentini 0:04b82ae7aa43 67 mRecordHeader.setME(false);
giovannivisentini 0:04b82ae7aa43 68 }
giovannivisentini 0:04b82ae7aa43 69
giovannivisentini 4:eaf6c49a86e4 70 /**
giovannivisentini 4:eaf6c49a86e4 71 * get tag type
giovannivisentini 4:eaf6c49a86e4 72 * @return tag type if not overwrite it return TYPE_UNKNOWN
giovannivisentini 4:eaf6c49a86e4 73 */
giovannivisentini 4:eaf6c49a86e4 74 virtual RecordType_t getType() const {
giovannivisentini 1:a0eeb478a45a 75 return TYPE_UNKNOWN;
giovannivisentini 4:eaf6c49a86e4 76 } //getType
giovannivisentini 1:a0eeb478a45a 77
giovannivisentini 4:eaf6c49a86e4 78 /**
giovannivisentini 4:eaf6c49a86e4 79 * number of byte needed for store this record
giovannivisentini 4:eaf6c49a86e4 80 * @return size header + size record content
giovannivisentini 4:eaf6c49a86e4 81 */
giovannivisentini 4:eaf6c49a86e4 82 virtual uint16_t getByteLength() {
giovannivisentini 0:04b82ae7aa43 83 return mRecordHeader.getRecordLength();
giovannivisentini 0:04b82ae7aa43 84 }
giovannivisentini 0:04b82ae7aa43 85
giovannivisentini 4:eaf6c49a86e4 86 /**
giovannivisentini 4:eaf6c49a86e4 87 * write the record content into a buffer
giovannivisentini 4:eaf6c49a86e4 88 * @param[out] buffer buffer where write the record content, the buffer size must be almost getByteLength() bytes
giovannivisentini 4:eaf6c49a86e4 89 * @return number of write bytes
giovannivisentini 4:eaf6c49a86e4 90 */
giovannivisentini 0:04b82ae7aa43 91 virtual uint16_t write(uint8_t *buffer)=0;
giovannivisentini 0:04b82ae7aa43 92
giovannivisentini 4:eaf6c49a86e4 93 virtual ~Record() {
giovannivisentini 4:eaf6c49a86e4 94 };
giovannivisentini 0:04b82ae7aa43 95
giovannivisentini 0:04b82ae7aa43 96 protected:
giovannivisentini 0:04b82ae7aa43 97 RecordHeader mRecordHeader;
giovannivisentini 0:04b82ae7aa43 98 };
giovannivisentini 0:04b82ae7aa43 99
giovannivisentini 0:04b82ae7aa43 100 } /* namespace NDefLib */
giovannivisentini 0:04b82ae7aa43 101
giovannivisentini 0:04b82ae7aa43 102 #endif /* NDEFLIB_RECORD_H_ */