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 Message.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 NDef Message 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_MESSAGE_H_
DuyLionTran 0:6eb44b07d867 39 #define NDEFLIB_MESSAGE_H_
DuyLionTran 0:6eb44b07d867 40
DuyLionTran 0:6eb44b07d867 41 #include <algorithm>
DuyLionTran 0:6eb44b07d867 42 #include <vector>
DuyLionTran 0:6eb44b07d867 43
DuyLionTran 0:6eb44b07d867 44 #include "Record.h"
DuyLionTran 0:6eb44b07d867 45
DuyLionTran 0:6eb44b07d867 46 namespace NDefLib {
DuyLionTran 0:6eb44b07d867 47
DuyLionTran 0:6eb44b07d867 48 /**
DuyLionTran 0:6eb44b07d867 49 * Class containing a list of {@link Record}
DuyLionTran 0:6eb44b07d867 50 */
DuyLionTran 0:6eb44b07d867 51 class Message {
DuyLionTran 0:6eb44b07d867 52 public:
DuyLionTran 0:6eb44b07d867 53
DuyLionTran 0:6eb44b07d867 54 /**
DuyLionTran 0:6eb44b07d867 55 * Add a ndef record to this message.
DuyLionTran 0:6eb44b07d867 56 * @param r Record to add
DuyLionTran 0:6eb44b07d867 57 */
DuyLionTran 0:6eb44b07d867 58 void add_record(Record *r) {
DuyLionTran 0:6eb44b07d867 59 mRecords.push_back(r);
DuyLionTran 0:6eb44b07d867 60 }
DuyLionTran 0:6eb44b07d867 61
DuyLionTran 0:6eb44b07d867 62 /**
DuyLionTran 0:6eb44b07d867 63 * Remove a ndef record to this message
DuyLionTran 0:6eb44b07d867 64 * @param r record to remove
DuyLionTran 0:6eb44b07d867 65 */
DuyLionTran 0:6eb44b07d867 66 void remove_record(Record *r){
DuyLionTran 0:6eb44b07d867 67 mRecords.erase( std::remove( mRecords.begin(), mRecords.end(), r ), mRecords.end() );
DuyLionTran 0:6eb44b07d867 68 }
DuyLionTran 0:6eb44b07d867 69
DuyLionTran 0:6eb44b07d867 70
DuyLionTran 0:6eb44b07d867 71 /**
DuyLionTran 0:6eb44b07d867 72 * Add all the records in the list to this message.
DuyLionTran 0:6eb44b07d867 73 * @param addList List of records to add.
DuyLionTran 0:6eb44b07d867 74 */
DuyLionTran 0:6eb44b07d867 75 void add_records(const std::vector<Record*> &addList) {
DuyLionTran 0:6eb44b07d867 76 mRecords.insert(mRecords.end(), addList.begin(), addList.end());
DuyLionTran 0:6eb44b07d867 77 }
DuyLionTran 0:6eb44b07d867 78
DuyLionTran 0:6eb44b07d867 79 /**
DuyLionTran 0:6eb44b07d867 80 * Get the specific record contained by this message, NULL if not a valid index.
DuyLionTran 0:6eb44b07d867 81 * @param index Record index.
DuyLionTran 0:6eb44b07d867 82 * @return a Record object if present, otherwise NULL
DuyLionTran 0:6eb44b07d867 83 */
DuyLionTran 0:6eb44b07d867 84 Record* operator[](const uint32_t index)const{
DuyLionTran 0:6eb44b07d867 85 if (index >= mRecords.size()) {
DuyLionTran 0:6eb44b07d867 86 return NULL;
DuyLionTran 0:6eb44b07d867 87 }
DuyLionTran 0:6eb44b07d867 88
DuyLionTran 0:6eb44b07d867 89 return mRecords[index];
DuyLionTran 0:6eb44b07d867 90 }
DuyLionTran 0:6eb44b07d867 91
DuyLionTran 0:6eb44b07d867 92 /**
DuyLionTran 0:6eb44b07d867 93 * Get the number of records in this message.
DuyLionTran 0:6eb44b07d867 94 * @return number of records in this message
DuyLionTran 0:6eb44b07d867 95 */
DuyLionTran 0:6eb44b07d867 96 uint32_t get_N_records() const {
DuyLionTran 0:6eb44b07d867 97 return mRecords.size();
DuyLionTran 0:6eb44b07d867 98 }
DuyLionTran 0:6eb44b07d867 99
DuyLionTran 0:6eb44b07d867 100 /**
DuyLionTran 0:6eb44b07d867 101 * Length in bytes needed to write this message.
DuyLionTran 0:6eb44b07d867 102 * @return number of bytes needed to write this message
DuyLionTran 0:6eb44b07d867 103 */
DuyLionTran 0:6eb44b07d867 104 uint16_t get_byte_length() const;
DuyLionTran 0:6eb44b07d867 105
DuyLionTran 0:6eb44b07d867 106 /**
DuyLionTran 0:6eb44b07d867 107 * Write message in the provided buffer
DuyLionTran 0:6eb44b07d867 108 * @par The first 2 bytes contain the NDEF message length.
DuyLionTran 0:6eb44b07d867 109 * @param[out] buffer Buffer the message must be written into.
DuyLionTran 0:6eb44b07d867 110 * @return number of bytes written
DuyLionTran 0:6eb44b07d867 111 */
DuyLionTran 0:6eb44b07d867 112 uint16_t write(uint8_t *buffer) const;
DuyLionTran 0:6eb44b07d867 113
DuyLionTran 0:6eb44b07d867 114 /**
DuyLionTran 0:6eb44b07d867 115 * Create a set of records from a raw buffer adding them to a message object.
DuyLionTran 0:6eb44b07d867 116 * @par Message buffer must NOT contain the buffer length in the first two bytes.
DuyLionTran 0:6eb44b07d867 117 * @param buffer Buffer containing the message record.
DuyLionTran 0:6eb44b07d867 118 * @param bufferLength Buffer length.
DuyLionTran 0:6eb44b07d867 119 * @param[in,out] Message message that will contain the new records.
DuyLionTran 0:6eb44b07d867 120 */
DuyLionTran 0:6eb44b07d867 121 static void parse_message(const uint8_t * const buffer,
DuyLionTran 0:6eb44b07d867 122 const uint16_t bufferLength, Message *message);
DuyLionTran 0:6eb44b07d867 123
DuyLionTran 0:6eb44b07d867 124 /**
DuyLionTran 0:6eb44b07d867 125 * Remove all the recrods from the mesasge and delete it
DuyLionTran 0:6eb44b07d867 126 * @param msg Message with the records to delete
DuyLionTran 0:6eb44b07d867 127 */
DuyLionTran 0:6eb44b07d867 128 static void remove_and_delete_all_record(Message &msg);
DuyLionTran 0:6eb44b07d867 129
DuyLionTran 0:6eb44b07d867 130 virtual ~Message() {
DuyLionTran 0:6eb44b07d867 131 }
DuyLionTran 0:6eb44b07d867 132
DuyLionTran 0:6eb44b07d867 133 private:
DuyLionTran 0:6eb44b07d867 134 /**
DuyLionTran 0:6eb44b07d867 135 * List of records contained by this message.
DuyLionTran 0:6eb44b07d867 136 */
DuyLionTran 0:6eb44b07d867 137 std::vector<Record*> mRecords;
DuyLionTran 0:6eb44b07d867 138 };
DuyLionTran 0:6eb44b07d867 139
DuyLionTran 0:6eb44b07d867 140 } /* namespace NDefLib */
DuyLionTran 0:6eb44b07d867 141
DuyLionTran 0:6eb44b07d867 142 #endif /* NDEFLIB_MESSAGE_H_ */