Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
FCH_31
Date:
Mon Oct 22 09:37:50 2018 +0000
Revision:
41:5a436163dddf
Parent:
24:92c30dabfda4
Child:
38:9b43b2415093
avec radio;

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 24:92c30dabfda4 37 FLOAT = 9, // Floating value on 32 bits
patrick_duc 24:92c30dabfda4 38 DOUBLE = 10, // Floating value on 64 bits
patrick_duc 24:92c30dabfda4 39 TIME = 11, // Unix time
patrick_duc 24:92c30dabfda4 40 TRIPLE_DOUBLE = 12 // Used for accelerometer values
patrick_duc 24:92c30dabfda4 41 // or other values of the same kind
patrick_duc 21:8524d815c587 42 } ;
patrick_duc 21:8524d815c587 43
patrick_duc 21:8524d815c587 44 typedef struct {
patrick_duc 21:8524d815c587 45 union {
patrick_duc 24:92c30dabfda4 46 bool bool_value;
patrick_duc 24:92c30dabfda4 47 char char_value;
patrick_duc 24:92c30dabfda4 48 uint8_t uint8_value;
patrick_duc 24:92c30dabfda4 49 int8_t int8_value;
patrick_duc 24:92c30dabfda4 50 uint16_t uint16_value;
patrick_duc 24:92c30dabfda4 51 int16_t int16_value;
patrick_duc 24:92c30dabfda4 52 uint32_t uint32_value;
patrick_duc 24:92c30dabfda4 53 int32_t int32_value;
patrick_duc 24:92c30dabfda4 54 float float_value;
patrick_duc 24:92c30dabfda4 55 double double_value;
patrick_duc 24:92c30dabfda4 56 uint32_t time_value;
patrick_duc 24:92c30dabfda4 57 double triple_double_values[3];
patrick_duc 21:8524d815c587 58 } value;
patrick_duc 21:8524d815c587 59 VALUE_TYPE type;
patrick_duc 21:8524d815c587 60 } GENERIC_VALUE;
patrick_duc 21:8524d815c587 61
patrick_duc 21:8524d815c587 62
patrick_duc 21:8524d815c587 63 // Default constructor
patrick_duc 22:a5929d3668b6 64 Value() {
patrick_duc 22:a5929d3668b6 65 this->_value.type = NOT_SET;
patrick_duc 21:8524d815c587 66 }
patrick_duc 22:a5929d3668b6 67
patrick_duc 24:92c30dabfda4 68 Value(GENERIC_VALUE value) : _value(value) {
patrick_duc 22:a5929d3668b6 69 }
patrick_duc 22:a5929d3668b6 70
patrick_duc 21:8524d815c587 71
patrick_duc 21:8524d815c587 72 // Setters
patrick_duc 21:8524d815c587 73 // -------
patrick_duc 24:92c30dabfda4 74 void setValue(GENERIC_VALUE value);
patrick_duc 24:92c30dabfda4 75
patrick_duc 21:8524d815c587 76 void setBoolValue(bool value) {
patrick_duc 21:8524d815c587 77 this->_value.type = BOOLEAN;
patrick_duc 21:8524d815c587 78 this->_value.value.bool_value = value;
patrick_duc 21:8524d815c587 79 }
patrick_duc 21:8524d815c587 80
patrick_duc 21:8524d815c587 81 void setCharValue(char value) {
patrick_duc 21:8524d815c587 82 this->_value.type = CHAR;
patrick_duc 21:8524d815c587 83 this->_value.value.char_value = value;
patrick_duc 21:8524d815c587 84 }
patrick_duc 21:8524d815c587 85
patrick_duc 21:8524d815c587 86 void setUint8Value(uint8_t value) {
patrick_duc 21:8524d815c587 87 this->_value.type = UINT8_T;
patrick_duc 21:8524d815c587 88 this->_value.value.uint8_value = value;
patrick_duc 21:8524d815c587 89 }
patrick_duc 21:8524d815c587 90
patrick_duc 21:8524d815c587 91 void setInt8Value(int8_t value) {
patrick_duc 21:8524d815c587 92 this->_value.type = INT8_T;
patrick_duc 21:8524d815c587 93 this->_value.value.int8_value = value;
patrick_duc 21:8524d815c587 94 }
patrick_duc 21:8524d815c587 95
patrick_duc 21:8524d815c587 96 void setUint16Value(uint16_t value) {
patrick_duc 21:8524d815c587 97 this->_value.type = UINT16_T;
patrick_duc 21:8524d815c587 98 this->_value.value.uint16_value = value;
patrick_duc 21:8524d815c587 99 }
patrick_duc 21:8524d815c587 100
patrick_duc 21:8524d815c587 101 void setInt16Value(int16_t value) {
patrick_duc 21:8524d815c587 102 this->_value.type = INT16_T;
patrick_duc 21:8524d815c587 103 this->_value.value.int16_value = value;
patrick_duc 21:8524d815c587 104 }
patrick_duc 21:8524d815c587 105
patrick_duc 21:8524d815c587 106 void setUint32Value(uint32_t value) {
patrick_duc 22:a5929d3668b6 107 this->_value.type = UINT32_T;
patrick_duc 21:8524d815c587 108 this->_value.value.uint32_value = value;
patrick_duc 21:8524d815c587 109 }
patrick_duc 21:8524d815c587 110
patrick_duc 21:8524d815c587 111 void setInt32Value(int32_t value) {
patrick_duc 21:8524d815c587 112 this->_value.type = INT32_T;
patrick_duc 21:8524d815c587 113 this->_value.value.int32_value = value;
patrick_duc 21:8524d815c587 114 }
patrick_duc 21:8524d815c587 115
patrick_duc 21:8524d815c587 116 void setFloatValue(float value) {
patrick_duc 21:8524d815c587 117 this->_value.type = FLOAT;
patrick_duc 21:8524d815c587 118 this->_value.value.float_value = value;
patrick_duc 21:8524d815c587 119 }
patrick_duc 21:8524d815c587 120
patrick_duc 21:8524d815c587 121 void setDoubleValue(double value) {
patrick_duc 21:8524d815c587 122 this->_value.type = DOUBLE;
patrick_duc 21:8524d815c587 123 this->_value.value.double_value = value;
patrick_duc 21:8524d815c587 124 }
patrick_duc 21:8524d815c587 125
patrick_duc 21:8524d815c587 126 void setTimeValue(uint32_t value) {
patrick_duc 21:8524d815c587 127 this->_value.type = TIME;
patrick_duc 21:8524d815c587 128 this->_value.value.time_value = value;
patrick_duc 21:8524d815c587 129 }
patrick_duc 21:8524d815c587 130
patrick_duc 24:92c30dabfda4 131 void setTripleDoubleValue(double value1, double value2, double value3) {
patrick_duc 24:92c30dabfda4 132 this->_value.type = DOUBLE;
patrick_duc 24:92c30dabfda4 133 this->_value.value.triple_double_values[0] = value1;
patrick_duc 24:92c30dabfda4 134 this->_value.value.triple_double_values[1] = value2;
patrick_duc 24:92c30dabfda4 135 this->_value.value.triple_double_values[2] = value3;
patrick_duc 24:92c30dabfda4 136 }
patrick_duc 24:92c30dabfda4 137
patrick_duc 21:8524d815c587 138
patrick_duc 21:8524d815c587 139 // Getters
patrick_duc 21:8524d815c587 140 // -------
patrick_duc 24:92c30dabfda4 141 VALUE_TYPE getType() {
patrick_duc 24:92c30dabfda4 142 return this->_value.type;
patrick_duc 24:92c30dabfda4 143 }
patrick_duc 24:92c30dabfda4 144
patrick_duc 21:8524d815c587 145 bool getBoolValue() {
patrick_duc 21:8524d815c587 146 return this->_value.value.bool_value;
patrick_duc 21:8524d815c587 147 }
patrick_duc 21:8524d815c587 148
patrick_duc 21:8524d815c587 149 char getCharValue() {
patrick_duc 21:8524d815c587 150 return this->_value.value.char_value;
patrick_duc 21:8524d815c587 151 }
patrick_duc 21:8524d815c587 152
patrick_duc 21:8524d815c587 153 uint8_t getUint8Value() {
patrick_duc 21:8524d815c587 154 return this->_value.value.uint8_value;
patrick_duc 21:8524d815c587 155 }
patrick_duc 21:8524d815c587 156
patrick_duc 21:8524d815c587 157 int8_t getInt8Value() {
patrick_duc 21:8524d815c587 158 return this->_value.value.int8_value;
patrick_duc 21:8524d815c587 159 }
patrick_duc 21:8524d815c587 160
patrick_duc 21:8524d815c587 161 uint16_t getUint16Value() {
patrick_duc 21:8524d815c587 162 return this->_value.value.uint16_value;
patrick_duc 21:8524d815c587 163 }
patrick_duc 21:8524d815c587 164
patrick_duc 21:8524d815c587 165 int16_t getInt16Value() {
patrick_duc 21:8524d815c587 166 return this->_value.value.int16_value;
patrick_duc 21:8524d815c587 167 }
patrick_duc 21:8524d815c587 168
patrick_duc 21:8524d815c587 169 uint32_t getUint32Value() {
patrick_duc 21:8524d815c587 170 return this->_value.value.uint32_value;
patrick_duc 21:8524d815c587 171 }
patrick_duc 21:8524d815c587 172
patrick_duc 21:8524d815c587 173 int32_t getInt32Value() {
patrick_duc 21:8524d815c587 174 return this->_value.value.int32_value;
patrick_duc 21:8524d815c587 175 }
patrick_duc 21:8524d815c587 176
patrick_duc 21:8524d815c587 177 float getFloatValue() {
patrick_duc 21:8524d815c587 178 return this->_value.value.float_value;
patrick_duc 21:8524d815c587 179 }
patrick_duc 21:8524d815c587 180
patrick_duc 21:8524d815c587 181 double getDoubleValue() {
patrick_duc 21:8524d815c587 182 return this->_value.value.double_value;
patrick_duc 21:8524d815c587 183 }
patrick_duc 21:8524d815c587 184
patrick_duc 21:8524d815c587 185 uint32_t getTimeValue() {
patrick_duc 21:8524d815c587 186 return this->_value.value.time_value;
patrick_duc 21:8524d815c587 187 }
patrick_duc 21:8524d815c587 188
patrick_duc 24:92c30dabfda4 189 double* getTripleDoubleValue() {
patrick_duc 24:92c30dabfda4 190 return this->_value.value.triple_double_values;
patrick_duc 24:92c30dabfda4 191 }
patrick_duc 24:92c30dabfda4 192
patrick_duc 21:8524d815c587 193
patrick_duc 21:8524d815c587 194 /* This method returns :
patrick_duc 21:8524d815c587 195 -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 196 -1 if the Value object is lower than the parameter Value
patrick_duc 21:8524d815c587 197 0 if the Value object is equal to the parameter Value
patrick_duc 21:8524d815c587 198 1 if the Value object is greater than the parameter Value
patrick_duc 21:8524d815c587 199
patrick_duc 21:8524d815c587 200 NB. For boolean Values, true > false.
patrick_duc 21:8524d815c587 201 NB. For float and double values, equality is somewhat hazardous due to precision.
patrick_duc 21:8524d815c587 202 */
patrick_duc 21:8524d815c587 203 int8_t compareTo(Value & otherValue);
patrick_duc 21:8524d815c587 204
patrick_duc 21:8524d815c587 205
patrick_duc 21:8524d815c587 206 Value substract(Value& otherValue);
patrick_duc 21:8524d815c587 207
patrick_duc 21:8524d815c587 208
patrick_duc 21:8524d815c587 209 /* This methode substracts a value from the current one and checks whether the result
patrick_duc 21:8524d815c587 210 absolute value is greather than a delta or not.
patrick_duc 21:8524d815c587 211 In case the absolute value is greater, returns true, otherwise return false.
patrick_duc 21:8524d815c587 212 NB. In case the various values don't hold the same type, returns true. This way, when
patrick_duc 21:8524d815c587 213 a terminal is started and there is no "previous value", this method will return true,
patrick_duc 21:8524d815c587 214 so that the sensor can send its initial value.
patrick_duc 21:8524d815c587 215 */
patrick_duc 22:a5929d3668b6 216 bool isAbsoluteDifferenceValueGreaterThanDelta(Value& valueToSubstract, Value& delta);
patrick_duc 21:8524d815c587 217
patrick_duc 21:8524d815c587 218
patrick_duc 21:8524d815c587 219 /* This method returns a boolean value telling whether or not the current value
patrick_duc 21:8524d815c587 220 differs from the parameter value.
patrick_duc 21:8524d815c587 221 */
patrick_duc 21:8524d815c587 222 bool isDifferentFrom(Value& otherValue);
patrick_duc 21:8524d815c587 223
patrick_duc 21:8524d815c587 224
patrick_duc 24:92c30dabfda4 225 std::string toString();
patrick_duc 21:8524d815c587 226
patrick_duc 21:8524d815c587 227
patrick_duc 21:8524d815c587 228 GENERIC_VALUE _value;
patrick_duc 21:8524d815c587 229 };
patrick_duc 21:8524d815c587 230
patrick_duc 21:8524d815c587 231 #endif // __VALUE_HPP__