iot_water_monitor_v2

Dependencies:   easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code

Committer:
DuyLionTran
Date:
Tue Apr 03 17:03:01 2018 +0000
Revision:
57:898fcb6692cd
Parent:
11:3802c82a5ae9
;   * version 2.9.8  	03-04-2018  Minor changes. Time frame updated to IBM Watson every 60s

Who changed what in which revision?

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