Francis CHATAIN / Mbed 2 deprecated MSNV2-Terminal_V1-6

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
patrick_duc
Date:
Fri Oct 19 06:32:59 2018 +0000
Branch:
Integration
Revision:
38:9b43b2415093
Parent:
24:92c30dabfda4
Child:
39:13e66d087ae9
Suite d'int?gration. Compilation  non encore test?e.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
patrick_duc 21:8524d815c587 1 #ifndef __VALUE_HPP__
patrick_duc 21:8524d815c587 2 #define __VALUE_HPP__
patrick_duc 21:8524d815c587 3
patrick_duc 21:8524d815c587 4 #include "Context.h"
patrick_duc 21:8524d815c587 5
patrick_duc 21:8524d815c587 6 #ifndef TEST_ENVIRONMENT
patrick_duc 21:8524d815c587 7 #include "mbed.h"
patrick_duc 21:8524d815c587 8 #endif
patrick_duc 21:8524d815c587 9
patrick_duc 21:8524d815c587 10 #ifdef CPLUSPLUS_99
patrick_duc 21:8524d815c587 11 #include <stdint.h>
patrick_duc 21:8524d815c587 12 #endif
patrick_duc 21:8524d815c587 13
patrick_duc 21:8524d815c587 14 #include <iostream>
patrick_duc 21:8524d815c587 15 #include <sstream>
patrick_duc 21:8524d815c587 16 #include <string>
patrick_duc 21:8524d815c587 17
patrick_duc 21:8524d815c587 18
patrick_duc 21:8524d815c587 19 namespace misnet {
patrick_duc 21:8524d815c587 20 class Value;
patrick_duc 21:8524d815c587 21 }
patrick_duc 21:8524d815c587 22
patrick_duc 21:8524d815c587 23
patrick_duc 21:8524d815c587 24 class misnet::Value {
patrick_duc 21:8524d815c587 25
patrick_duc 21:8524d815c587 26 public:
patrick_duc 21:8524d815c587 27 enum VALUE_TYPE {
patrick_duc 24:92c30dabfda4 28 NOT_SET = 0, // Not initialised
patrick_duc 24:92c30dabfda4 29 BOOLEAN = 1, // Who knows ?
patrick_duc 24:92c30dabfda4 30 CHAR = 2, // Single character
patrick_duc 24:92c30dabfda4 31 UINT8_T = 3,
patrick_duc 24:92c30dabfda4 32 INT8_T = 4,
patrick_duc 24:92c30dabfda4 33 UINT16_T = 5,
patrick_duc 24:92c30dabfda4 34 INT16_T = 6,
patrick_duc 24:92c30dabfda4 35 UINT32_T = 7,
patrick_duc 24:92c30dabfda4 36 INT32_T = 8,
patrick_duc 38:9b43b2415093 37 UINT64_T = 9,
patrick_duc 38:9b43b2415093 38 INT64_T = 10,
patrick_duc 38:9b43b2415093 39 FLOAT = 11, // Floating value on 32 bits
patrick_duc 38:9b43b2415093 40 DOUBLE = 12, // Floating value on 64 bits
patrick_duc 38:9b43b2415093 41 TIME = 13, // Unix time
patrick_duc 38:9b43b2415093 42 TRIPLE_DOUBLE = 14 // Used for accelerometer values or other values of the same kind
patrick_duc 38:9b43b2415093 43 };
patrick_duc 21:8524d815c587 44
patrick_duc 21:8524d815c587 45 typedef struct {
patrick_duc 21:8524d815c587 46 union {
patrick_duc 24:92c30dabfda4 47 bool bool_value;
patrick_duc 24:92c30dabfda4 48 char char_value;
patrick_duc 24:92c30dabfda4 49 uint8_t uint8_value;
patrick_duc 24:92c30dabfda4 50 int8_t int8_value;
patrick_duc 38:9b43b2415093 51 uint16_t uint16_value;
patrick_duc 24:92c30dabfda4 52 int16_t int16_value;
patrick_duc 38:9b43b2415093 53 uint32_t uint32_value;
patrick_duc 24:92c30dabfda4 54 int32_t int32_value;
patrick_duc 24:92c30dabfda4 55 float float_value;
patrick_duc 24:92c30dabfda4 56 double double_value;
patrick_duc 38:9b43b2415093 57 uint32_t time_value;
patrick_duc 24:92c30dabfda4 58 double triple_double_values[3];
patrick_duc 21:8524d815c587 59 } value;
patrick_duc 21:8524d815c587 60 VALUE_TYPE type;
patrick_duc 21:8524d815c587 61 } GENERIC_VALUE;
patrick_duc 21:8524d815c587 62
patrick_duc 21:8524d815c587 63
patrick_duc 21:8524d815c587 64 // Default constructor
patrick_duc 22:a5929d3668b6 65 Value() {
patrick_duc 22:a5929d3668b6 66 this->_value.type = NOT_SET;
patrick_duc 21:8524d815c587 67 }
patrick_duc 22:a5929d3668b6 68
patrick_duc 24:92c30dabfda4 69 Value(GENERIC_VALUE value) : _value(value) {
patrick_duc 22:a5929d3668b6 70 }
patrick_duc 22:a5929d3668b6 71
patrick_duc 21:8524d815c587 72
patrick_duc 21:8524d815c587 73 // Setters
patrick_duc 21:8524d815c587 74 // -------
patrick_duc 24:92c30dabfda4 75 void setValue(GENERIC_VALUE value);
patrick_duc 24:92c30dabfda4 76
patrick_duc 21:8524d815c587 77 void setBoolValue(bool value) {
patrick_duc 21:8524d815c587 78 this->_value.type = BOOLEAN;
patrick_duc 21:8524d815c587 79 this->_value.value.bool_value = value;
patrick_duc 21:8524d815c587 80 }
patrick_duc 21:8524d815c587 81
patrick_duc 21:8524d815c587 82 void setCharValue(char value) {
patrick_duc 21:8524d815c587 83 this->_value.type = CHAR;
patrick_duc 21:8524d815c587 84 this->_value.value.char_value = value;
patrick_duc 21:8524d815c587 85 }
patrick_duc 21:8524d815c587 86
patrick_duc 21:8524d815c587 87 void setUint8Value(uint8_t value) {
patrick_duc 21:8524d815c587 88 this->_value.type = UINT8_T;
patrick_duc 21:8524d815c587 89 this->_value.value.uint8_value = value;
patrick_duc 21:8524d815c587 90 }
patrick_duc 21:8524d815c587 91
patrick_duc 21:8524d815c587 92 void setInt8Value(int8_t value) {
patrick_duc 21:8524d815c587 93 this->_value.type = INT8_T;
patrick_duc 21:8524d815c587 94 this->_value.value.int8_value = value;
patrick_duc 21:8524d815c587 95 }
patrick_duc 21:8524d815c587 96
patrick_duc 21:8524d815c587 97 void setUint16Value(uint16_t value) {
patrick_duc 21:8524d815c587 98 this->_value.type = UINT16_T;
patrick_duc 21:8524d815c587 99 this->_value.value.uint16_value = value;
patrick_duc 21:8524d815c587 100 }
patrick_duc 21:8524d815c587 101
patrick_duc 21:8524d815c587 102 void setInt16Value(int16_t value) {
patrick_duc 21:8524d815c587 103 this->_value.type = INT16_T;
patrick_duc 21:8524d815c587 104 this->_value.value.int16_value = value;
patrick_duc 21:8524d815c587 105 }
patrick_duc 21:8524d815c587 106
patrick_duc 21:8524d815c587 107 void setUint32Value(uint32_t value) {
patrick_duc 22:a5929d3668b6 108 this->_value.type = UINT32_T;
patrick_duc 21:8524d815c587 109 this->_value.value.uint32_value = value;
patrick_duc 21:8524d815c587 110 }
patrick_duc 21:8524d815c587 111
patrick_duc 21:8524d815c587 112 void setInt32Value(int32_t value) {
patrick_duc 21:8524d815c587 113 this->_value.type = INT32_T;
patrick_duc 21:8524d815c587 114 this->_value.value.int32_value = value;
patrick_duc 21:8524d815c587 115 }
patrick_duc 21:8524d815c587 116
patrick_duc 38:9b43b2415093 117 void setUint64Value(uint64_t value) {
patrick_duc 38:9b43b2415093 118 this->_value.type = UINT64_T;
patrick_duc 38:9b43b2415093 119 this->_value.value.uint64_value = value;
patrick_duc 38:9b43b2415093 120 }
patrick_duc 38:9b43b2415093 121
patrick_duc 38:9b43b2415093 122 void setInt64Value(int64_t value) {
patrick_duc 38:9b43b2415093 123 this->_value.type = INT64_T;
patrick_duc 38:9b43b2415093 124 this->_value.value.int64_value = value;
patrick_duc 38:9b43b2415093 125 }
patrick_duc 38:9b43b2415093 126
patrick_duc 21:8524d815c587 127 void setFloatValue(float value) {
patrick_duc 21:8524d815c587 128 this->_value.type = FLOAT;
patrick_duc 21:8524d815c587 129 this->_value.value.float_value = value;
patrick_duc 21:8524d815c587 130 }
patrick_duc 21:8524d815c587 131
patrick_duc 21:8524d815c587 132 void setDoubleValue(double value) {
patrick_duc 21:8524d815c587 133 this->_value.type = DOUBLE;
patrick_duc 21:8524d815c587 134 this->_value.value.double_value = value;
patrick_duc 21:8524d815c587 135 }
patrick_duc 21:8524d815c587 136
patrick_duc 21:8524d815c587 137 void setTimeValue(uint32_t value) {
patrick_duc 21:8524d815c587 138 this->_value.type = TIME;
patrick_duc 21:8524d815c587 139 this->_value.value.time_value = value;
patrick_duc 21:8524d815c587 140 }
patrick_duc 21:8524d815c587 141
patrick_duc 24:92c30dabfda4 142 void setTripleDoubleValue(double value1, double value2, double value3) {
patrick_duc 24:92c30dabfda4 143 this->_value.type = DOUBLE;
patrick_duc 24:92c30dabfda4 144 this->_value.value.triple_double_values[0] = value1;
patrick_duc 24:92c30dabfda4 145 this->_value.value.triple_double_values[1] = value2;
patrick_duc 24:92c30dabfda4 146 this->_value.value.triple_double_values[2] = value3;
patrick_duc 24:92c30dabfda4 147 }
patrick_duc 24:92c30dabfda4 148
patrick_duc 21:8524d815c587 149
patrick_duc 21:8524d815c587 150 // Getters
patrick_duc 21:8524d815c587 151 // -------
patrick_duc 24:92c30dabfda4 152 VALUE_TYPE getType() {
patrick_duc 24:92c30dabfda4 153 return this->_value.type;
patrick_duc 24:92c30dabfda4 154 }
patrick_duc 24:92c30dabfda4 155
patrick_duc 21:8524d815c587 156 bool getBoolValue() {
patrick_duc 21:8524d815c587 157 return this->_value.value.bool_value;
patrick_duc 21:8524d815c587 158 }
patrick_duc 21:8524d815c587 159
patrick_duc 21:8524d815c587 160 char getCharValue() {
patrick_duc 21:8524d815c587 161 return this->_value.value.char_value;
patrick_duc 21:8524d815c587 162 }
patrick_duc 21:8524d815c587 163
patrick_duc 21:8524d815c587 164 uint8_t getUint8Value() {
patrick_duc 21:8524d815c587 165 return this->_value.value.uint8_value;
patrick_duc 21:8524d815c587 166 }
patrick_duc 21:8524d815c587 167
patrick_duc 21:8524d815c587 168 int8_t getInt8Value() {
patrick_duc 21:8524d815c587 169 return this->_value.value.int8_value;
patrick_duc 21:8524d815c587 170 }
patrick_duc 21:8524d815c587 171
patrick_duc 21:8524d815c587 172 uint16_t getUint16Value() {
patrick_duc 21:8524d815c587 173 return this->_value.value.uint16_value;
patrick_duc 21:8524d815c587 174 }
patrick_duc 21:8524d815c587 175
patrick_duc 21:8524d815c587 176 int16_t getInt16Value() {
patrick_duc 21:8524d815c587 177 return this->_value.value.int16_value;
patrick_duc 21:8524d815c587 178 }
patrick_duc 21:8524d815c587 179
patrick_duc 21:8524d815c587 180 uint32_t getUint32Value() {
patrick_duc 21:8524d815c587 181 return this->_value.value.uint32_value;
patrick_duc 21:8524d815c587 182 }
patrick_duc 21:8524d815c587 183
patrick_duc 21:8524d815c587 184 int32_t getInt32Value() {
patrick_duc 21:8524d815c587 185 return this->_value.value.int32_value;
patrick_duc 21:8524d815c587 186 }
patrick_duc 21:8524d815c587 187
patrick_duc 38:9b43b2415093 188 uint64_t getUint64Value() {
patrick_duc 38:9b43b2415093 189 return this->_value.value.uint64_value;
patrick_duc 38:9b43b2415093 190 }
patrick_duc 38:9b43b2415093 191
patrick_duc 38:9b43b2415093 192 int64_t getInt64Value() {
patrick_duc 38:9b43b2415093 193 return this->_value.value.int64_value;
patrick_duc 38:9b43b2415093 194 }
patrick_duc 38:9b43b2415093 195
patrick_duc 21:8524d815c587 196 float getFloatValue() {
patrick_duc 21:8524d815c587 197 return this->_value.value.float_value;
patrick_duc 21:8524d815c587 198 }
patrick_duc 21:8524d815c587 199
patrick_duc 21:8524d815c587 200 double getDoubleValue() {
patrick_duc 21:8524d815c587 201 return this->_value.value.double_value;
patrick_duc 21:8524d815c587 202 }
patrick_duc 21:8524d815c587 203
patrick_duc 21:8524d815c587 204 uint32_t getTimeValue() {
patrick_duc 21:8524d815c587 205 return this->_value.value.time_value;
patrick_duc 21:8524d815c587 206 }
patrick_duc 21:8524d815c587 207
patrick_duc 24:92c30dabfda4 208 double* getTripleDoubleValue() {
patrick_duc 24:92c30dabfda4 209 return this->_value.value.triple_double_values;
patrick_duc 24:92c30dabfda4 210 }
patrick_duc 24:92c30dabfda4 211
patrick_duc 21:8524d815c587 212
patrick_duc 21:8524d815c587 213 /* This method returns :
patrick_duc 21:8524d815c587 214 -2 if at least one of the two Values is not set, or if both values don't hold the same type
patrick_duc 21:8524d815c587 215 -1 if the Value object is lower than the parameter Value
patrick_duc 21:8524d815c587 216 0 if the Value object is equal to the parameter Value
patrick_duc 21:8524d815c587 217 1 if the Value object is greater than the parameter Value
patrick_duc 21:8524d815c587 218
patrick_duc 21:8524d815c587 219 NB. For boolean Values, true > false.
patrick_duc 21:8524d815c587 220 NB. For float and double values, equality is somewhat hazardous due to precision.
patrick_duc 21:8524d815c587 221 */
patrick_duc 21:8524d815c587 222 int8_t compareTo(Value & otherValue);
patrick_duc 21:8524d815c587 223
patrick_duc 21:8524d815c587 224
patrick_duc 21:8524d815c587 225 Value substract(Value& otherValue);
patrick_duc 21:8524d815c587 226
patrick_duc 21:8524d815c587 227
patrick_duc 21:8524d815c587 228 /* This methode substracts a value from the current one and checks whether the result
patrick_duc 21:8524d815c587 229 absolute value is greather than a delta or not.
patrick_duc 21:8524d815c587 230 In case the absolute value is greater, returns true, otherwise return false.
patrick_duc 21:8524d815c587 231 NB. In case the various values don't hold the same type, returns true. This way, when
patrick_duc 21:8524d815c587 232 a terminal is started and there is no "previous value", this method will return true,
patrick_duc 21:8524d815c587 233 so that the sensor can send its initial value.
patrick_duc 21:8524d815c587 234 */
patrick_duc 22:a5929d3668b6 235 bool isAbsoluteDifferenceValueGreaterThanDelta(Value& valueToSubstract, Value& delta);
patrick_duc 21:8524d815c587 236
patrick_duc 21:8524d815c587 237
patrick_duc 21:8524d815c587 238 /* This method returns a boolean value telling whether or not the current value
patrick_duc 21:8524d815c587 239 differs from the parameter value.
patrick_duc 21:8524d815c587 240 */
patrick_duc 21:8524d815c587 241 bool isDifferentFrom(Value& otherValue);
patrick_duc 21:8524d815c587 242
patrick_duc 38:9b43b2415093 243 #ifdef TEST_ENVIRONMENT
patrick_duc 38:9b43b2415093 244 // Used for debugging purpose
patrick_duc 38:9b43b2415093 245 std::string toString();
patrick_duc 38:9b43b2415093 246 #endif
patrick_duc 21:8524d815c587 247
patrick_duc 38:9b43b2415093 248 // Used to format messages
patrick_duc 38:9b43b2415093 249 std::string toHex();
patrick_duc 21:8524d815c587 250
patrick_duc 21:8524d815c587 251
patrick_duc 21:8524d815c587 252 GENERIC_VALUE _value;
patrick_duc 21:8524d815c587 253 };
patrick_duc 21:8524d815c587 254
patrick_duc 21:8524d815c587 255 #endif // __VALUE_HPP__