Version FC
Dependencies: DmTftLibrary eeprom SX1280Lib filesystem mbed
Fork of MSNV2-Terminal_V1-5 by
Value.hpp@41:5a436163dddf, 2018-10-22 (annotated)
- 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?
User | Revision | Line number | New 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__ |