CUSTOMIZED FOR WATER MONITOR

Committer:
DuyLionTran
Date:
Thu Dec 07 17:07:22 2017 +0000
Revision:
0:51d7bdf88981
CUSTOMIZED FOR WATER MONITOR

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DuyLionTran 0:51d7bdf88981 1 /**
DuyLionTran 0:51d7bdf88981 2 ******************************************************************************
DuyLionTran 0:51d7bdf88981 3 * @file RecordURI.cpp
DuyLionTran 0:51d7bdf88981 4 * @author ST / Central Labs
DuyLionTran 0:51d7bdf88981 5 * @version V2.0.0
DuyLionTran 0:51d7bdf88981 6 * @date 28 Apr 2017
DuyLionTran 0:51d7bdf88981 7 * @brief RecordURI implementation
DuyLionTran 0:51d7bdf88981 8 ******************************************************************************
DuyLionTran 0:51d7bdf88981 9 * @attention
DuyLionTran 0:51d7bdf88981 10 *
DuyLionTran 0:51d7bdf88981 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
DuyLionTran 0:51d7bdf88981 12 *
DuyLionTran 0:51d7bdf88981 13 * Redistribution and use in source and binary forms, with or without modification,
DuyLionTran 0:51d7bdf88981 14 * are permitted provided that the following conditions are met:
DuyLionTran 0:51d7bdf88981 15 * 1. Redistributions of source code must retain the above copyright notice,
DuyLionTran 0:51d7bdf88981 16 * this list of conditions and the following disclaimer.
DuyLionTran 0:51d7bdf88981 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
DuyLionTran 0:51d7bdf88981 18 * this list of conditions and the following disclaimer in the documentation
DuyLionTran 0:51d7bdf88981 19 * and/or other materials provided with the distribution.
DuyLionTran 0:51d7bdf88981 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
DuyLionTran 0:51d7bdf88981 21 * may be used to endorse or promote products derived from this software
DuyLionTran 0:51d7bdf88981 22 * without specific prior written permission.
DuyLionTran 0:51d7bdf88981 23 *
DuyLionTran 0:51d7bdf88981 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
DuyLionTran 0:51d7bdf88981 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
DuyLionTran 0:51d7bdf88981 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DuyLionTran 0:51d7bdf88981 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
DuyLionTran 0:51d7bdf88981 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DuyLionTran 0:51d7bdf88981 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
DuyLionTran 0:51d7bdf88981 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
DuyLionTran 0:51d7bdf88981 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
DuyLionTran 0:51d7bdf88981 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
DuyLionTran 0:51d7bdf88981 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DuyLionTran 0:51d7bdf88981 34 *
DuyLionTran 0:51d7bdf88981 35 ******************************************************************************
DuyLionTran 0:51d7bdf88981 36 */
DuyLionTran 0:51d7bdf88981 37
DuyLionTran 0:51d7bdf88981 38 #include <cstring>
DuyLionTran 0:51d7bdf88981 39
DuyLionTran 0:51d7bdf88981 40 #include "RecordURI.h"
DuyLionTran 0:51d7bdf88981 41 #include "RecordMail.h"
DuyLionTran 0:51d7bdf88981 42 #include "RecordSMS.h"
DuyLionTran 0:51d7bdf88981 43 #include "RecordGeo.h"
DuyLionTran 0:51d7bdf88981 44
DuyLionTran 0:51d7bdf88981 45 namespace NDefLib {
DuyLionTran 0:51d7bdf88981 46
DuyLionTran 0:51d7bdf88981 47 const uint8_t RecordURI::sNDEFUriIdCode = 'U';
DuyLionTran 0:51d7bdf88981 48
DuyLionTran 0:51d7bdf88981 49 const std::string RecordURI::sKnowUriPrefix[] = { "", "http://www.",
DuyLionTran 0:51d7bdf88981 50 "https://www.", "http://", "https://", "tel:", "mailto:",
DuyLionTran 0:51d7bdf88981 51 "ftp://anonymous:anonymous@", "ftp://ftp.", "ftps://", "sftp://",
DuyLionTran 0:51d7bdf88981 52 "smb://", "nfs://", "ftp://", "dav://", "news:", "telnet://", "imap:",
DuyLionTran 0:51d7bdf88981 53 "rtsp://", "urn:", "pop:", "sip:", "sips:", "tftp:", "btspp://",
DuyLionTran 0:51d7bdf88981 54 "btl2cap://", "btgoep://", "tcpobex://", "irdaobex://", "file://",
DuyLionTran 0:51d7bdf88981 55 "urn:epc:id:", "urn:epc:tag", "urn:epc:pat:", "urn:epc:raw:",
DuyLionTran 0:51d7bdf88981 56 "urn:epc:", "urn:nfc:" };
DuyLionTran 0:51d7bdf88981 57
DuyLionTran 0:51d7bdf88981 58 void RecordURI::set_record_header() {
DuyLionTran 0:51d7bdf88981 59 mRecordHeader.set_FNT(RecordHeader::NFC_well_known);
DuyLionTran 0:51d7bdf88981 60 mRecordHeader.set_type_length(sizeof(sNDEFUriIdCode));
DuyLionTran 0:51d7bdf88981 61 }
DuyLionTran 0:51d7bdf88981 62
DuyLionTran 0:51d7bdf88981 63 RecordURI::RecordURI(knowUriId_t uriId, const std::string &uriContent) :
DuyLionTran 0:51d7bdf88981 64 mUriTypeId(uriId), mTypeString("") {
DuyLionTran 0:51d7bdf88981 65 set_content(uriContent);
DuyLionTran 0:51d7bdf88981 66 set_record_header();
DuyLionTran 0:51d7bdf88981 67 }
DuyLionTran 0:51d7bdf88981 68
DuyLionTran 0:51d7bdf88981 69 RecordURI::RecordURI(const std::string &uriType, const std::string &uriContent) :
DuyLionTran 0:51d7bdf88981 70 mContent(uriContent),mUriTypeId(UNKNOWN), mTypeString(uriType) {
DuyLionTran 0:51d7bdf88981 71 update_record_header();
DuyLionTran 0:51d7bdf88981 72 set_record_header();
DuyLionTran 0:51d7bdf88981 73 }
DuyLionTran 0:51d7bdf88981 74
DuyLionTran 0:51d7bdf88981 75 uint16_t RecordURI::write(uint8_t *buffer) {
DuyLionTran 0:51d7bdf88981 76 uint16_t offset = 0;
DuyLionTran 0:51d7bdf88981 77 update_content();
DuyLionTran 0:51d7bdf88981 78
DuyLionTran 0:51d7bdf88981 79 offset += mRecordHeader.write_header(buffer);
DuyLionTran 0:51d7bdf88981 80
DuyLionTran 0:51d7bdf88981 81 buffer[offset++] = sNDEFUriIdCode;
DuyLionTran 0:51d7bdf88981 82 buffer[offset++] = (uint8_t) mUriTypeId;
DuyLionTran 0:51d7bdf88981 83
DuyLionTran 0:51d7bdf88981 84 if (mUriTypeId == UNKNOWN) {
DuyLionTran 0:51d7bdf88981 85 std::memcpy(buffer + offset, mTypeString.c_str(), mTypeString.size());
DuyLionTran 0:51d7bdf88981 86 offset += mTypeString.size();
DuyLionTran 0:51d7bdf88981 87 }
DuyLionTran 0:51d7bdf88981 88
DuyLionTran 0:51d7bdf88981 89 std::memcpy(buffer + offset, mContent.c_str(), mContent.size());
DuyLionTran 0:51d7bdf88981 90 offset += mContent.size();
DuyLionTran 0:51d7bdf88981 91 return offset;
DuyLionTran 0:51d7bdf88981 92 }
DuyLionTran 0:51d7bdf88981 93
DuyLionTran 0:51d7bdf88981 94 RecordURI* RecordURI::parse(const RecordHeader &header,
DuyLionTran 0:51d7bdf88981 95 const uint8_t *buffer) {
DuyLionTran 0:51d7bdf88981 96 uint16_t offset = 0;
DuyLionTran 0:51d7bdf88981 97
DuyLionTran 0:51d7bdf88981 98 if (buffer[offset++] != sNDEFUriIdCode) {
DuyLionTran 0:51d7bdf88981 99 return NULL;
DuyLionTran 0:51d7bdf88981 100 }
DuyLionTran 0:51d7bdf88981 101 knowUriId_t uriType = (knowUriId_t) buffer[offset++];
DuyLionTran 0:51d7bdf88981 102 //it is a standard type handle by a specific class
DuyLionTran 0:51d7bdf88981 103 if (uriType == MAIL) {
DuyLionTran 0:51d7bdf88981 104 return RecordMail::parse(header, buffer);
DuyLionTran 0:51d7bdf88981 105 }
DuyLionTran 0:51d7bdf88981 106
DuyLionTran 0:51d7bdf88981 107 //is an standard type without a specific class
DuyLionTran 0:51d7bdf88981 108 if (uriType != UNKNOWN) {
DuyLionTran 0:51d7bdf88981 109 return new RecordURI(uriType, std::string((const char*) buffer + offset, header.get_payload_length() - 1));
DuyLionTran 0:51d7bdf88981 110 }
DuyLionTran 0:51d7bdf88981 111
DuyLionTran 0:51d7bdf88981 112 //is an unknown type with a specific class
DuyLionTran 0:51d7bdf88981 113 RecordURI *r = RecordSMS::parse(header, buffer);
DuyLionTran 0:51d7bdf88981 114 if (r != NULL) {
DuyLionTran 0:51d7bdf88981 115 return r;
DuyLionTran 0:51d7bdf88981 116 }
DuyLionTran 0:51d7bdf88981 117 r = RecordGeo::parse(header, buffer);
DuyLionTran 0:51d7bdf88981 118 if (r != NULL) {
DuyLionTran 0:51d7bdf88981 119 return r;
DuyLionTran 0:51d7bdf88981 120 } //else is an unknown type without a specific class
DuyLionTran 0:51d7bdf88981 121
DuyLionTran 0:51d7bdf88981 122 return new RecordURI(uriType,
DuyLionTran 0:51d7bdf88981 123 std::string((const char*) buffer + offset, header.get_payload_length() - 1));
DuyLionTran 0:51d7bdf88981 124 }
DuyLionTran 0:51d7bdf88981 125
DuyLionTran 0:51d7bdf88981 126 } /* namespace NDefLib */
DuyLionTran 0:51d7bdf88981 127
DuyLionTran 0:51d7bdf88981 128
DuyLionTran 0:51d7bdf88981 129 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/