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.cpp
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 implementation
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 #include <cstdlib>
DuyLionTran 0:6eb44b07d867 39 #include "NDefLib/Message.h"
DuyLionTran 0:6eb44b07d867 40 #include "RecordType/EmptyRecord.h"
DuyLionTran 0:6eb44b07d867 41 #include "RecordType/RecordText.h"
DuyLionTran 0:6eb44b07d867 42 #include "RecordType/RecordAAR.h"
DuyLionTran 0:6eb44b07d867 43 #include "RecordType/RecordMimeType.h"
DuyLionTran 0:6eb44b07d867 44 #include "RecordType/RecordURI.h"
DuyLionTran 0:6eb44b07d867 45
DuyLionTran 0:6eb44b07d867 46 namespace NDefLib {
DuyLionTran 0:6eb44b07d867 47
DuyLionTran 0:6eb44b07d867 48 uint16_t Message::get_byte_length() const {
DuyLionTran 0:6eb44b07d867 49 uint16_t lenght = 2; //length size
DuyLionTran 0:6eb44b07d867 50
DuyLionTran 0:6eb44b07d867 51 if (mRecords.size() == 0) {
DuyLionTran 0:6eb44b07d867 52 return lenght + EmptyRecord().get_byte_length();
DuyLionTran 0:6eb44b07d867 53 }
DuyLionTran 0:6eb44b07d867 54
DuyLionTran 0:6eb44b07d867 55 std::vector<Record*>::const_iterator it = mRecords.begin();
DuyLionTran 0:6eb44b07d867 56 const std::vector<Record*>::const_iterator end = mRecords.end();
DuyLionTran 0:6eb44b07d867 57
DuyLionTran 0:6eb44b07d867 58 for (; it != end; ++it) {
DuyLionTran 0:6eb44b07d867 59 lenght += (*it)->get_byte_length();
DuyLionTran 0:6eb44b07d867 60 } //for
DuyLionTran 0:6eb44b07d867 61
DuyLionTran 0:6eb44b07d867 62 return lenght;
DuyLionTran 0:6eb44b07d867 63 } //getByteLenght
DuyLionTran 0:6eb44b07d867 64
DuyLionTran 0:6eb44b07d867 65 uint16_t Message::write(uint8_t *buffer) const {
DuyLionTran 0:6eb44b07d867 66
DuyLionTran 0:6eb44b07d867 67 const uint16_t length = get_byte_length() - 2;
DuyLionTran 0:6eb44b07d867 68 uint16_t offset = 0;
DuyLionTran 0:6eb44b07d867 69 buffer[offset++] = (uint8_t) ((length & 0xFF00) >> 8);
DuyLionTran 0:6eb44b07d867 70 buffer[offset++] = (uint8_t) ((length & 0x00FF));
DuyLionTran 0:6eb44b07d867 71
DuyLionTran 0:6eb44b07d867 72 const uint32_t nRecord = mRecords.size();
DuyLionTran 0:6eb44b07d867 73
DuyLionTran 0:6eb44b07d867 74 if (mRecords.size() == 0) {
DuyLionTran 0:6eb44b07d867 75 offset += EmptyRecord().write(buffer + offset);
DuyLionTran 0:6eb44b07d867 76 return offset;
DuyLionTran 0:6eb44b07d867 77 } //else
DuyLionTran 0:6eb44b07d867 78
DuyLionTran 0:6eb44b07d867 79 for (uint32_t i = 0; i < nRecord; i++) {
DuyLionTran 0:6eb44b07d867 80 Record *r = mRecords[i];
DuyLionTran 0:6eb44b07d867 81
DuyLionTran 0:6eb44b07d867 82 r->set_as_middle_record();
DuyLionTran 0:6eb44b07d867 83 if (i == 0) {
DuyLionTran 0:6eb44b07d867 84 r->set_as_first_record();
DuyLionTran 0:6eb44b07d867 85 }
DuyLionTran 0:6eb44b07d867 86 if (i == nRecord - 1) {
DuyLionTran 0:6eb44b07d867 87 r->set_as_last_record();
DuyLionTran 0:6eb44b07d867 88 }
DuyLionTran 0:6eb44b07d867 89
DuyLionTran 0:6eb44b07d867 90 offset += r->write(buffer + offset);
DuyLionTran 0:6eb44b07d867 91 } //for
DuyLionTran 0:6eb44b07d867 92
DuyLionTran 0:6eb44b07d867 93 return offset;
DuyLionTran 0:6eb44b07d867 94 } //write
DuyLionTran 0:6eb44b07d867 95
DuyLionTran 0:6eb44b07d867 96 void Message::parse_message(const uint8_t * const rawNdefFile, const uint16_t length, Message *msg) {
DuyLionTran 0:6eb44b07d867 97 uint16_t offset = 0;
DuyLionTran 0:6eb44b07d867 98 Record *r;
DuyLionTran 0:6eb44b07d867 99
DuyLionTran 0:6eb44b07d867 100 RecordHeader header;
DuyLionTran 0:6eb44b07d867 101 do {
DuyLionTran 0:6eb44b07d867 102 const uint8_t headerLenght = header.load_header(rawNdefFile + offset);
DuyLionTran 0:6eb44b07d867 103 r = RecordText::parse(header, rawNdefFile + offset + headerLenght);
DuyLionTran 0:6eb44b07d867 104 if (r == NULL) {
DuyLionTran 0:6eb44b07d867 105 r = RecordAAR::parse(header, rawNdefFile + offset + headerLenght);
DuyLionTran 0:6eb44b07d867 106 }
DuyLionTran 0:6eb44b07d867 107 if (r == NULL) {
DuyLionTran 0:6eb44b07d867 108 r = RecordMimeType::parse(header,
DuyLionTran 0:6eb44b07d867 109 rawNdefFile + offset + headerLenght);
DuyLionTran 0:6eb44b07d867 110 }
DuyLionTran 0:6eb44b07d867 111 if (r == NULL) {
DuyLionTran 0:6eb44b07d867 112 r = RecordURI::parse(header, rawNdefFile + offset + headerLenght);
DuyLionTran 0:6eb44b07d867 113 }
DuyLionTran 0:6eb44b07d867 114
DuyLionTran 0:6eb44b07d867 115 offset += header.get_record_length();
DuyLionTran 0:6eb44b07d867 116 msg->add_record(r);
DuyLionTran 0:6eb44b07d867 117 } while (offset < length);
DuyLionTran 0:6eb44b07d867 118 }
DuyLionTran 0:6eb44b07d867 119
DuyLionTran 0:6eb44b07d867 120 void Message::remove_and_delete_all_record(Message &msg){
DuyLionTran 0:6eb44b07d867 121 const uint32_t nRecords =msg.get_N_records();
DuyLionTran 0:6eb44b07d867 122 for (uint32_t i =0 ;i<nRecords ;i++) {
DuyLionTran 0:6eb44b07d867 123 NDefLib::Record *r = msg[i];
DuyLionTran 0:6eb44b07d867 124 delete r;
DuyLionTran 0:6eb44b07d867 125 }//for
DuyLionTran 0:6eb44b07d867 126 msg.mRecords.clear();
DuyLionTran 0:6eb44b07d867 127 }//removeAndDeleteAllRecord
DuyLionTran 0:6eb44b07d867 128
DuyLionTran 0:6eb44b07d867 129 } /* namespace NDefLib */
DuyLionTran 0:6eb44b07d867 130
DuyLionTran 0:6eb44b07d867 131
DuyLionTran 0:6eb44b07d867 132 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/