v-16

Dependencies:   RecordType-v-16

Committer:
DuyLionTran
Date:
Tue Dec 12 16:00:06 2017 +0000
Revision:
1:872e54e3c364
Parent:
0:6eb44b07d867
v-16

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DuyLionTran 0:6eb44b07d867 1 /**
DuyLionTran 0:6eb44b07d867 2 ******************************************************************************
DuyLionTran 0:6eb44b07d867 3 * @file Record.h
DuyLionTran 0:6eb44b07d867 4 * @author ST / Central Labs
DuyLionTran 0:6eb44b07d867 5 * @version V2.0.0
DuyLionTran 0:6eb44b07d867 6 * @date 28 Apr 2017
DuyLionTran 0:6eb44b07d867 7 * @brief Generic Record class
DuyLionTran 0:6eb44b07d867 8 ******************************************************************************
DuyLionTran 0:6eb44b07d867 9 * @attention
DuyLionTran 0:6eb44b07d867 10 *
DuyLionTran 0:6eb44b07d867 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
DuyLionTran 0:6eb44b07d867 12 *
DuyLionTran 0:6eb44b07d867 13 * Redistribution and use in source and binary forms, with or without modification,
DuyLionTran 0:6eb44b07d867 14 * are permitted provided that the following conditions are met:
DuyLionTran 0:6eb44b07d867 15 * 1. Redistributions of source code must retain the above copyright notice,
DuyLionTran 0:6eb44b07d867 16 * this list of conditions and the following disclaimer.
DuyLionTran 0:6eb44b07d867 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
DuyLionTran 0:6eb44b07d867 18 * this list of conditions and the following disclaimer in the documentation
DuyLionTran 0:6eb44b07d867 19 * and/or other materials provided with the distribution.
DuyLionTran 0:6eb44b07d867 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
DuyLionTran 0:6eb44b07d867 21 * may be used to endorse or promote products derived from this software
DuyLionTran 0:6eb44b07d867 22 * without specific prior written permission.
DuyLionTran 0:6eb44b07d867 23 *
DuyLionTran 0:6eb44b07d867 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
DuyLionTran 0:6eb44b07d867 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
DuyLionTran 0:6eb44b07d867 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DuyLionTran 0:6eb44b07d867 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
DuyLionTran 0:6eb44b07d867 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DuyLionTran 0:6eb44b07d867 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
DuyLionTran 0:6eb44b07d867 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
DuyLionTran 0:6eb44b07d867 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
DuyLionTran 0:6eb44b07d867 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
DuyLionTran 0:6eb44b07d867 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DuyLionTran 0:6eb44b07d867 34 *
DuyLionTran 0:6eb44b07d867 35 ******************************************************************************
DuyLionTran 0:6eb44b07d867 36 */
DuyLionTran 0:6eb44b07d867 37
DuyLionTran 0:6eb44b07d867 38 #ifndef NDEFLIB_RECORD_H_
DuyLionTran 0:6eb44b07d867 39 #define NDEFLIB_RECORD_H_
DuyLionTran 0:6eb44b07d867 40 #include <stdint.h>
DuyLionTran 0:6eb44b07d867 41
DuyLionTran 0:6eb44b07d867 42 #include "RecordHeader.h"
DuyLionTran 0:6eb44b07d867 43
DuyLionTran 0:6eb44b07d867 44 namespace NDefLib {
DuyLionTran 0:6eb44b07d867 45
DuyLionTran 0:6eb44b07d867 46 /**
DuyLionTran 0:6eb44b07d867 47 * Base class for a NDefRecord
DuyLionTran 0:6eb44b07d867 48 * @see NFC Data Exchange Format (NDEF) Technical Specification NDEF 1.0
DuyLionTran 0:6eb44b07d867 49 */
DuyLionTran 0:6eb44b07d867 50 class Record {
DuyLionTran 0:6eb44b07d867 51 public:
DuyLionTran 0:6eb44b07d867 52
DuyLionTran 0:6eb44b07d867 53 /**
DuyLionTran 0:6eb44b07d867 54 * Enum used to identify the record type.
DuyLionTran 0:6eb44b07d867 55 */
DuyLionTran 0:6eb44b07d867 56 typedef enum {
DuyLionTran 0:6eb44b07d867 57 TYPE_UNKNOWN, //!< UNKNOWN record
DuyLionTran 0:6eb44b07d867 58 TYPE_TEXT, //!< TEXT
DuyLionTran 0:6eb44b07d867 59 TYPE_AAR, //!< Android Archive record
DuyLionTran 0:6eb44b07d867 60 TYPE_MIME, //!< generic MIME type
DuyLionTran 0:6eb44b07d867 61 TYPE_URI, //!< generic URI
DuyLionTran 0:6eb44b07d867 62 TYPE_URI_MAIL, //!< Email URI record
DuyLionTran 0:6eb44b07d867 63 TYPE_URI_SMS, //!< SMS URI record
DuyLionTran 0:6eb44b07d867 64 TYPE_URI_GEOLOCATION,//!< position URI record
DuyLionTran 0:6eb44b07d867 65 TYPE_MIME_VCARD, //!< VCard record
DuyLionTran 0:6eb44b07d867 66 TYPE_WIFI_CONF //!< Wifi configuration
DuyLionTran 0:6eb44b07d867 67 } RecordType_t;
DuyLionTran 0:6eb44b07d867 68
DuyLionTran 0:6eb44b07d867 69 Record() {
DuyLionTran 0:6eb44b07d867 70 }
DuyLionTran 0:6eb44b07d867 71
DuyLionTran 0:6eb44b07d867 72 /**
DuyLionTran 0:6eb44b07d867 73 * Set the record as the first record in the message.
DuyLionTran 0:6eb44b07d867 74 */
DuyLionTran 0:6eb44b07d867 75 void set_as_first_record() {
DuyLionTran 0:6eb44b07d867 76 mRecordHeader.set_MB(true);
DuyLionTran 0:6eb44b07d867 77 }
DuyLionTran 0:6eb44b07d867 78
DuyLionTran 0:6eb44b07d867 79 /**
DuyLionTran 0:6eb44b07d867 80 * Set the record as the last record in the message.
DuyLionTran 0:6eb44b07d867 81 */
DuyLionTran 0:6eb44b07d867 82 void set_as_last_record() {
DuyLionTran 0:6eb44b07d867 83 mRecordHeader.set_ME(true);
DuyLionTran 0:6eb44b07d867 84 }
DuyLionTran 0:6eb44b07d867 85
DuyLionTran 0:6eb44b07d867 86 /**
DuyLionTran 0:6eb44b07d867 87 * Check if it is the last record in the message.
DuyLionTran 0:6eb44b07d867 88 * @return true if it is the last record in the message
DuyLionTran 0:6eb44b07d867 89 */
DuyLionTran 0:6eb44b07d867 90 bool is_last_record() const {
DuyLionTran 0:6eb44b07d867 91 return mRecordHeader.get_ME();
DuyLionTran 0:6eb44b07d867 92 }
DuyLionTran 0:6eb44b07d867 93
DuyLionTran 0:6eb44b07d867 94 /**
DuyLionTran 0:6eb44b07d867 95 * Check if it is the first record in the message.
DuyLionTran 0:6eb44b07d867 96 * @return true if it is the fist record in the message
DuyLionTran 0:6eb44b07d867 97 */
DuyLionTran 0:6eb44b07d867 98 bool is_first_record() const {
DuyLionTran 0:6eb44b07d867 99 return mRecordHeader.get_MB();
DuyLionTran 0:6eb44b07d867 100 }
DuyLionTran 0:6eb44b07d867 101
DuyLionTran 0:6eb44b07d867 102 /**
DuyLionTran 0:6eb44b07d867 103 * Set the record as generic (not the first one and not the last one)
DuyLionTran 0:6eb44b07d867 104 */
DuyLionTran 0:6eb44b07d867 105 void set_as_middle_record() {
DuyLionTran 0:6eb44b07d867 106 mRecordHeader.set_MB(false);
DuyLionTran 0:6eb44b07d867 107 mRecordHeader.set_ME(false);
DuyLionTran 0:6eb44b07d867 108 }
DuyLionTran 0:6eb44b07d867 109
DuyLionTran 0:6eb44b07d867 110 /**
DuyLionTran 0:6eb44b07d867 111 * Check if the record is in the middle of a chain.
DuyLionTran 0:6eb44b07d867 112 * @return true if is not the fist or the last one
DuyLionTran 0:6eb44b07d867 113 */
DuyLionTran 0:6eb44b07d867 114 bool is_middle_record() const{
DuyLionTran 0:6eb44b07d867 115 return ! (mRecordHeader.get_MB() || mRecordHeader.get_ME());
DuyLionTran 0:6eb44b07d867 116 }
DuyLionTran 0:6eb44b07d867 117
DuyLionTran 0:6eb44b07d867 118 /**
DuyLionTran 0:6eb44b07d867 119 * Get tag type.
DuyLionTran 0:6eb44b07d867 120 * @par This method should be overridden to return a valid type.
DuyLionTran 0:6eb44b07d867 121 * @return tag type
DuyLionTran 0:6eb44b07d867 122 */
DuyLionTran 0:6eb44b07d867 123 virtual RecordType_t get_type() const {
DuyLionTran 0:6eb44b07d867 124 return TYPE_UNKNOWN;
DuyLionTran 0:6eb44b07d867 125 } //getType
DuyLionTran 0:6eb44b07d867 126
DuyLionTran 0:6eb44b07d867 127
DuyLionTran 0:6eb44b07d867 128 /**
DuyLionTran 0:6eb44b07d867 129 * Get the record header.
DuyLionTran 0:6eb44b07d867 130 * @return record header
DuyLionTran 0:6eb44b07d867 131 */
DuyLionTran 0:6eb44b07d867 132 const RecordHeader& get_header() const{
DuyLionTran 0:6eb44b07d867 133 return mRecordHeader;
DuyLionTran 0:6eb44b07d867 134 }
DuyLionTran 0:6eb44b07d867 135
DuyLionTran 0:6eb44b07d867 136 /**
DuyLionTran 0:6eb44b07d867 137 * Number of bytes needed to store this record.
DuyLionTran 0:6eb44b07d867 138 * @return size of the header + size of the record content
DuyLionTran 0:6eb44b07d867 139 */
DuyLionTran 0:6eb44b07d867 140 virtual uint16_t get_byte_length() {
DuyLionTran 0:6eb44b07d867 141 return mRecordHeader.get_record_length();
DuyLionTran 0:6eb44b07d867 142 }
DuyLionTran 0:6eb44b07d867 143
DuyLionTran 0:6eb44b07d867 144 /**
DuyLionTran 0:6eb44b07d867 145 * Write the record content into a buffer.
DuyLionTran 0:6eb44b07d867 146 * @param[out] buffer buffer to write the record content into, the buffer size
DuyLionTran 0:6eb44b07d867 147 * must be almost {@link Record#getByteLength} bytes.
DuyLionTran 0:6eb44b07d867 148 * @return number of written bytes
DuyLionTran 0:6eb44b07d867 149 */
DuyLionTran 0:6eb44b07d867 150 virtual uint16_t write(uint8_t *buffer)=0;
DuyLionTran 0:6eb44b07d867 151
DuyLionTran 0:6eb44b07d867 152 virtual ~Record() {
DuyLionTran 0:6eb44b07d867 153 };
DuyLionTran 0:6eb44b07d867 154
DuyLionTran 0:6eb44b07d867 155 protected:
DuyLionTran 0:6eb44b07d867 156 RecordHeader mRecordHeader;
DuyLionTran 0:6eb44b07d867 157 };
DuyLionTran 0:6eb44b07d867 158
DuyLionTran 0:6eb44b07d867 159 } /* namespace NDefLib */
DuyLionTran 0:6eb44b07d867 160
DuyLionTran 0:6eb44b07d867 161 #endif /* NDEFLIB_RECORD_H_ */