Version FC
Dependencies: DmTftLibrary eeprom SX1280Lib filesystem mbed
Fork of MSNV2-Terminal_V1-5 by
Service.hpp@21:8524d815c587, 2018-09-04 (annotated)
- Committer:
- patrick_duc
- Date:
- Tue Sep 04 13:34:36 2018 +0000
- Revision:
- 21:8524d815c587
- Parent:
- 20:b0281e8a375a
- Child:
- 24:92c30dabfda4
Ajout de la fonctionnalit? de d?termination si la valeur acquise sur un capteur doit ?tre envoy?e ? la gateway.; Ajout d'une classe Value qui encapsule les valeurs g?n?riques (pr?c?demment GENERIC_VALUE).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
patrick_duc | 20:b0281e8a375a | 1 | #ifndef __SERVICE_HPP__ |
patrick_duc | 20:b0281e8a375a | 2 | #define __SERVICE_HPP__ |
patrick_duc | 13:5414193da1de | 3 | |
patrick_duc | 20:b0281e8a375a | 4 | #include "Context.h" |
patrick_duc | 20:b0281e8a375a | 5 | |
patrick_duc | 20:b0281e8a375a | 6 | #ifndef TEST_ENVIRONMENT |
patrick_duc | 13:5414193da1de | 7 | #include "mbed.h" |
patrick_duc | 20:b0281e8a375a | 8 | #endif |
patrick_duc | 20:b0281e8a375a | 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 | 13:5414193da1de | 14 | #include <iostream> |
patrick_duc | 20:b0281e8a375a | 15 | #include <sstream> |
patrick_duc | 13:5414193da1de | 16 | #include <string> |
patrick_duc | 20:b0281e8a375a | 17 | |
patrick_duc | 21:8524d815c587 | 18 | #include "Value.hpp" |
patrick_duc | 21:8524d815c587 | 19 | |
patrick_duc | 20:b0281e8a375a | 20 | |
patrick_duc | 20:b0281e8a375a | 21 | namespace misnet { |
patrick_duc | 21:8524d815c587 | 22 | class Service; |
patrick_duc | 20:b0281e8a375a | 23 | } |
patrick_duc | 13:5414193da1de | 24 | |
patrick_duc | 13:5414193da1de | 25 | |
patrick_duc | 20:b0281e8a375a | 26 | class misnet::Service { |
patrick_duc | 13:5414193da1de | 27 | |
patrick_duc | 21:8524d815c587 | 28 | public: |
patrick_duc | 21:8524d815c587 | 29 | |
patrick_duc | 21:8524d815c587 | 30 | typedef uint8_t MISNET_CODE ; |
patrick_duc | 21:8524d815c587 | 31 | |
patrick_duc | 21:8524d815c587 | 32 | enum DEVICE_TYPE { |
patrick_duc | 21:8524d815c587 | 33 | SENSOR = 1, |
patrick_duc | 21:8524d815c587 | 34 | ACTUATOR = 2, |
patrick_duc | 21:8524d815c587 | 35 | RECORDER = 3 |
patrick_duc | 21:8524d815c587 | 36 | } ; |
patrick_duc | 21:8524d815c587 | 37 | |
patrick_duc | 21:8524d815c587 | 38 | // A compléter au fur et a mesure et remonter l'info sur les centres applicatifs |
patrick_duc | 21:8524d815c587 | 39 | enum DEVICE_ID { |
patrick_duc | 21:8524d815c587 | 40 | NOT_IDENTIFIED = 0 , // Configuration nouvelle ou non référencée |
patrick_duc | 21:8524d815c587 | 41 | IKS01A2 = 1 , // Liste des composants |
patrick_duc | 21:8524d815c587 | 42 | SMART_TERMINAL = 2 // BME280 + .... |
patrick_duc | 21:8524d815c587 | 43 | } ; |
patrick_duc | 21:8524d815c587 | 44 | |
patrick_duc | 21:8524d815c587 | 45 | typedef uint8_t GROUP ; |
patrick_duc | 21:8524d815c587 | 46 | |
patrick_duc | 21:8524d815c587 | 47 | //typedef uint8_t VALUE_TYPE ; |
patrick_duc | 21:8524d815c587 | 48 | |
patrick_duc | 21:8524d815c587 | 49 | enum STATE { |
patrick_duc | 21:8524d815c587 | 50 | ENABLED = 1, // ACTIVE |
patrick_duc | 21:8524d815c587 | 51 | DISABLED = 0 // ASLEEP |
patrick_duc | 21:8524d815c587 | 52 | } ; |
patrick_duc | 20:b0281e8a375a | 53 | |
patrick_duc | 21:8524d815c587 | 54 | enum ACCESS_TYPE { |
patrick_duc | 21:8524d815c587 | 55 | GPIO_ = 1, |
patrick_duc | 21:8524d815c587 | 56 | I2C_ = 2, |
patrick_duc | 21:8524d815c587 | 57 | SPI_ = 3, |
patrick_duc | 21:8524d815c587 | 58 | UART_ = 4 |
patrick_duc | 21:8524d815c587 | 59 | } ; |
patrick_duc | 21:8524d815c587 | 60 | |
patrick_duc | 21:8524d815c587 | 61 | typedef uint8_t ACCESS_PIN ; |
patrick_duc | 20:b0281e8a375a | 62 | |
patrick_duc | 21:8524d815c587 | 63 | enum UP_MODE { |
patrick_duc | 21:8524d815c587 | 64 | BY_CHANGE = 0, // Check that current value differs from previous value |
patrick_duc | 21:8524d815c587 | 65 | BY_DELTA = 1, // Check a delta between current value and previous value |
patrick_duc | 21:8524d815c587 | 66 | BY_RANGE = 2 // Check whether current value lies within a range |
patrick_duc | 21:8524d815c587 | 67 | } ; |
patrick_duc | 13:5414193da1de | 68 | |
patrick_duc | 21:8524d815c587 | 69 | enum REQUEST_MODE { |
patrick_duc | 21:8524d815c587 | 70 | IRQ_ = 1, // wakeup by irq |
patrick_duc | 21:8524d815c587 | 71 | TIME_ = 2 // wakeup by watchdog timer |
patrick_duc | 21:8524d815c587 | 72 | } ; |
patrick_duc | 13:5414193da1de | 73 | |
patrick_duc | 21:8524d815c587 | 74 | //uint32_t TIMER_DIVIDER ; |
patrick_duc | 13:5414193da1de | 75 | |
patrick_duc | 21:8524d815c587 | 76 | /* |
patrick_duc | 21:8524d815c587 | 77 | typedef float DELTA_THRESHOLD ; |
patrick_duc | 21:8524d815c587 | 78 | typedef float LOW_THRESHOLD_LIMIT ; |
patrick_duc | 21:8524d815c587 | 79 | typedef float HIGH_THRESHOLD_LIMIT ; |
patrick_duc | 21:8524d815c587 | 80 | */ |
patrick_duc | 13:5414193da1de | 81 | |
patrick_duc | 21:8524d815c587 | 82 | enum ACTION { |
patrick_duc | 21:8524d815c587 | 83 | MESSAGE = 1, // Send Message |
patrick_duc | 21:8524d815c587 | 84 | MESSAGERELAY = 2 // Send Message + ON/OFF internal relay |
patrick_duc | 21:8524d815c587 | 85 | } ; |
patrick_duc | 21:8524d815c587 | 86 | |
patrick_duc | 21:8524d815c587 | 87 | enum OUTPUT_MODE { |
patrick_duc | 21:8524d815c587 | 88 | IO = 1, // ON/OFF |
patrick_duc | 21:8524d815c587 | 89 | PWD = 2 // PWD modulation |
patrick_duc | 21:8524d815c587 | 90 | } ; |
patrick_duc | 13:5414193da1de | 91 | |
patrick_duc | 21:8524d815c587 | 92 | // Constructor |
patrick_duc | 21:8524d815c587 | 93 | Service( DEVICE_TYPE type, |
patrick_duc | 21:8524d815c587 | 94 | MISNET_CODE misnet_code, |
patrick_duc | 21:8524d815c587 | 95 | STATE state, |
patrick_duc | 21:8524d815c587 | 96 | ACCESS_TYPE access_type, |
patrick_duc | 21:8524d815c587 | 97 | REQUEST_MODE request_mode, |
patrick_duc | 21:8524d815c587 | 98 | UP_MODE up_mode, |
patrick_duc | 21:8524d815c587 | 99 | ACCESS_PIN access_pins[6], |
patrick_duc | 21:8524d815c587 | 100 | uint32_t subsample_rate, |
patrick_duc | 21:8524d815c587 | 101 | ACTION action, |
patrick_duc | 21:8524d815c587 | 102 | OUTPUT_MODE output_mode, |
patrick_duc | 21:8524d815c587 | 103 | std::string comment); |
patrick_duc | 13:5414193da1de | 104 | |
patrick_duc | 21:8524d815c587 | 105 | DEVICE_TYPE getDeviceType() { |
patrick_duc | 21:8524d815c587 | 106 | return this->device_type; |
patrick_duc | 21:8524d815c587 | 107 | } |
patrick_duc | 13:5414193da1de | 108 | |
patrick_duc | 21:8524d815c587 | 109 | MISNET_CODE getMisnetCode() { |
patrick_duc | 21:8524d815c587 | 110 | return this->misnet_code; |
patrick_duc | 21:8524d815c587 | 111 | } |
patrick_duc | 13:5414193da1de | 112 | |
patrick_duc | 21:8524d815c587 | 113 | STATE getState() { |
patrick_duc | 21:8524d815c587 | 114 | return this->state; |
patrick_duc | 21:8524d815c587 | 115 | } |
patrick_duc | 13:5414193da1de | 116 | |
patrick_duc | 21:8524d815c587 | 117 | ACCESS_TYPE getAccessType() { |
patrick_duc | 21:8524d815c587 | 118 | return this->access_type; |
patrick_duc | 21:8524d815c587 | 119 | } |
patrick_duc | 13:5414193da1de | 120 | |
patrick_duc | 21:8524d815c587 | 121 | REQUEST_MODE getRequestMode() { |
patrick_duc | 21:8524d815c587 | 122 | return this->request_mode; |
patrick_duc | 21:8524d815c587 | 123 | } |
patrick_duc | 21:8524d815c587 | 124 | |
patrick_duc | 21:8524d815c587 | 125 | UP_MODE getUpMode() { |
patrick_duc | 21:8524d815c587 | 126 | return this->up_mode; |
patrick_duc | 21:8524d815c587 | 127 | } |
patrick_duc | 13:5414193da1de | 128 | |
patrick_duc | 21:8524d815c587 | 129 | ACCESS_PIN* getAccessPins() { |
patrick_duc | 21:8524d815c587 | 130 | return this->access_pins; |
patrick_duc | 21:8524d815c587 | 131 | } |
patrick_duc | 21:8524d815c587 | 132 | |
patrick_duc | 21:8524d815c587 | 133 | ACCESS_PIN getAccessPin(short index) { |
patrick_duc | 21:8524d815c587 | 134 | return this->access_pins[index - 1]; |
patrick_duc | 21:8524d815c587 | 135 | } |
patrick_duc | 13:5414193da1de | 136 | |
patrick_duc | 21:8524d815c587 | 137 | uint32_t getSubsampleRate() { |
patrick_duc | 21:8524d815c587 | 138 | return this->subsample_rate; |
patrick_duc | 21:8524d815c587 | 139 | } |
patrick_duc | 13:5414193da1de | 140 | |
patrick_duc | 21:8524d815c587 | 141 | ACTION getAction() { |
patrick_duc | 21:8524d815c587 | 142 | return this->action; |
patrick_duc | 21:8524d815c587 | 143 | } |
patrick_duc | 13:5414193da1de | 144 | |
patrick_duc | 21:8524d815c587 | 145 | OUTPUT_MODE getOutputMode() { |
patrick_duc | 21:8524d815c587 | 146 | return this->output_mode; |
patrick_duc | 21:8524d815c587 | 147 | } |
patrick_duc | 13:5414193da1de | 148 | |
patrick_duc | 21:8524d815c587 | 149 | std::string getComment() { |
patrick_duc | 21:8524d815c587 | 150 | return this->comment; |
patrick_duc | 21:8524d815c587 | 151 | } |
patrick_duc | 13:5414193da1de | 152 | |
patrick_duc | 21:8524d815c587 | 153 | uint32_t getActivationNb() { |
patrick_duc | 21:8524d815c587 | 154 | return this->activation_nb; |
patrick_duc | 21:8524d815c587 | 155 | } |
patrick_duc | 13:5414193da1de | 156 | |
patrick_duc | 21:8524d815c587 | 157 | // This method is used to check whether the service is ready to be sampled |
patrick_duc | 21:8524d815c587 | 158 | // (ENABLED state and subsampling rate OK) |
patrick_duc | 21:8524d815c587 | 159 | bool readyToSample() const { |
patrick_duc | 21:8524d815c587 | 160 | return ((this->activation_nb + 1) == this->subsample_rate); |
patrick_duc | 21:8524d815c587 | 161 | } |
patrick_duc | 13:5414193da1de | 162 | |
patrick_duc | 21:8524d815c587 | 163 | // This method is used to process a heartbeat : it checks whether the service |
patrick_duc | 21:8524d815c587 | 164 | // is ready to be sampled, and updates accordingly the service activation number |
patrick_duc | 21:8524d815c587 | 165 | // (reset to 0 if the service is ready ti be sampled, otherwise increments it) |
patrick_duc | 21:8524d815c587 | 166 | bool processHeartbeat(); |
patrick_duc | 13:5414193da1de | 167 | |
patrick_duc | 21:8524d815c587 | 168 | void incrementActivationNb() { |
patrick_duc | 21:8524d815c587 | 169 | ++(this->activation_nb); |
patrick_duc | 21:8524d815c587 | 170 | } |
patrick_duc | 13:5414193da1de | 171 | |
patrick_duc | 21:8524d815c587 | 172 | void resetActivationNb() { |
patrick_duc | 21:8524d815c587 | 173 | this->activation_nb = 0; |
patrick_duc | 21:8524d815c587 | 174 | } |
patrick_duc | 13:5414193da1de | 175 | |
patrick_duc | 21:8524d815c587 | 176 | // This method writes the value passed as argument in the value field of the service. |
patrick_duc | 21:8524d815c587 | 177 | // The caller must write the value in "value" field of the srtucture AND set the |
patrick_duc | 21:8524d815c587 | 178 | // value of the "type" field of this structure. |
patrick_duc | 21:8524d815c587 | 179 | void setValue(Value& value) { |
patrick_duc | 21:8524d815c587 | 180 | this->previous_value = this->current_value; |
patrick_duc | 21:8524d815c587 | 181 | this->current_value = value; |
patrick_duc | 21:8524d815c587 | 182 | } |
patrick_duc | 20:b0281e8a375a | 183 | |
patrick_duc | 21:8524d815c587 | 184 | // This other method returns the address of the area where sensor values must be written. |
patrick_duc | 21:8524d815c587 | 185 | // The caller must write the value in "value" field of the structure AND set the |
patrick_duc | 21:8524d815c587 | 186 | // value of the "type" field of this structure. |
patrick_duc | 21:8524d815c587 | 187 | // This method is quicker than the previous one since there is no neeed to copy the value |
patrick_duc | 21:8524d815c587 | 188 | // as in the previous method. |
patrick_duc | 21:8524d815c587 | 189 | // Drawback : the next method (savePreviousValue) must be called before this one, |
patrick_duc | 21:8524d815c587 | 190 | // so that the previous value may be saved. This is necessary when the UP_MODE is BY_RANGE |
patrick_duc | 21:8524d815c587 | 191 | // and the delta_threshold field is not empty. |
patrick_duc | 21:8524d815c587 | 192 | Value & getValueAddress() { |
patrick_duc | 21:8524d815c587 | 193 | return this->current_value; |
patrick_duc | 21:8524d815c587 | 194 | } |
patrick_duc | 20:b0281e8a375a | 195 | |
patrick_duc | 21:8524d815c587 | 196 | void savePreviousValue() { |
patrick_duc | 21:8524d815c587 | 197 | this->previous_value = this->current_value; |
patrick_duc | 21:8524d815c587 | 198 | } |
patrick_duc | 20:b0281e8a375a | 199 | |
patrick_duc | 21:8524d815c587 | 200 | // Check whether current value must be sent to gateway |
patrick_duc | 21:8524d815c587 | 201 | bool valueToBeSentToGateway(); |
patrick_duc | 20:b0281e8a375a | 202 | |
patrick_duc | 21:8524d815c587 | 203 | |
patrick_duc | 21:8524d815c587 | 204 | std::string toString() { |
patrick_duc | 21:8524d815c587 | 205 | std::ostringstream stringStream; |
patrick_duc | 21:8524d815c587 | 206 | stringStream << "Device type : " << this->device_type << ", MISNet code : " << (int) this->misnet_code; |
patrick_duc | 21:8524d815c587 | 207 | return stringStream.str(); |
patrick_duc | 21:8524d815c587 | 208 | } |
patrick_duc | 21:8524d815c587 | 209 | |
patrick_duc | 21:8524d815c587 | 210 | // Returns a string representing a value. Used to build messages and to debug. |
patrick_duc | 21:8524d815c587 | 211 | // std::string getValueAsString(Value& value); |
patrick_duc | 21:8524d815c587 | 212 | |
patrick_duc | 21:8524d815c587 | 213 | // Returns a string representing the current value. |
patrick_duc | 21:8524d815c587 | 214 | std::string getCurrentValueAsString() { |
patrick_duc | 21:8524d815c587 | 215 | return this->current_value.getValueAsString(); |
patrick_duc | 21:8524d815c587 | 216 | } |
patrick_duc | 20:b0281e8a375a | 217 | |
patrick_duc | 21:8524d815c587 | 218 | // Returns a string representing the previous value. |
patrick_duc | 21:8524d815c587 | 219 | std::string getPreviousValueAsString() { |
patrick_duc | 21:8524d815c587 | 220 | return this->previous_value.getValueAsString(); |
patrick_duc | 21:8524d815c587 | 221 | } |
patrick_duc | 20:b0281e8a375a | 222 | |
patrick_duc | 21:8524d815c587 | 223 | // Set the delta threshold |
patrick_duc | 21:8524d815c587 | 224 | void setDeltaThreshold(Value delta) { |
patrick_duc | 21:8524d815c587 | 225 | this->delta_threshold = delta; |
patrick_duc | 21:8524d815c587 | 226 | } |
patrick_duc | 21:8524d815c587 | 227 | |
patrick_duc | 21:8524d815c587 | 228 | // Get the delta threshold |
patrick_duc | 21:8524d815c587 | 229 | Value getDeltaThreshold() { |
patrick_duc | 21:8524d815c587 | 230 | return this->delta_threshold; |
patrick_duc | 21:8524d815c587 | 231 | } |
patrick_duc | 20:b0281e8a375a | 232 | |
patrick_duc | 21:8524d815c587 | 233 | // Set the low threshold limit |
patrick_duc | 21:8524d815c587 | 234 | void setLowThresholdLimit(Value low_limit) { |
patrick_duc | 21:8524d815c587 | 235 | this->low_threshold_limit = low_limit; |
patrick_duc | 21:8524d815c587 | 236 | } |
patrick_duc | 20:b0281e8a375a | 237 | |
patrick_duc | 21:8524d815c587 | 238 | // Get the delta threshold |
patrick_duc | 21:8524d815c587 | 239 | Value getLowThresholdLimit() { |
patrick_duc | 21:8524d815c587 | 240 | return this->low_threshold_limit; |
patrick_duc | 21:8524d815c587 | 241 | } |
patrick_duc | 20:b0281e8a375a | 242 | |
patrick_duc | 21:8524d815c587 | 243 | // Set the high threshold limit |
patrick_duc | 21:8524d815c587 | 244 | void setHighThresholdLimit(Value high_limit) { |
patrick_duc | 21:8524d815c587 | 245 | this->high_threshold_limit = high_limit; |
patrick_duc | 21:8524d815c587 | 246 | } |
patrick_duc | 20:b0281e8a375a | 247 | |
patrick_duc | 21:8524d815c587 | 248 | // Get the delta threshold |
patrick_duc | 21:8524d815c587 | 249 | Value getHighThresholdLimit() { |
patrick_duc | 21:8524d815c587 | 250 | return this->high_threshold_limit; |
patrick_duc | 21:8524d815c587 | 251 | } |
patrick_duc | 13:5414193da1de | 252 | |
patrick_duc | 13:5414193da1de | 253 | |
patrick_duc | 21:8524d815c587 | 254 | private: |
patrick_duc | 21:8524d815c587 | 255 | DEVICE_TYPE device_type; |
patrick_duc | 21:8524d815c587 | 256 | MISNET_CODE misnet_code; |
patrick_duc | 21:8524d815c587 | 257 | STATE state; |
patrick_duc | 21:8524d815c587 | 258 | ACCESS_TYPE access_type; |
patrick_duc | 21:8524d815c587 | 259 | ACCESS_PIN access_pins[6]; |
patrick_duc | 21:8524d815c587 | 260 | REQUEST_MODE request_mode; |
patrick_duc | 21:8524d815c587 | 261 | UP_MODE up_mode; |
patrick_duc | 21:8524d815c587 | 262 | uint32_t subsample_rate; |
patrick_duc | 21:8524d815c587 | 263 | Value delta_threshold; |
patrick_duc | 21:8524d815c587 | 264 | Value low_threshold_limit; |
patrick_duc | 21:8524d815c587 | 265 | Value high_threshold_limit; |
patrick_duc | 21:8524d815c587 | 266 | ACTION action; |
patrick_duc | 21:8524d815c587 | 267 | OUTPUT_MODE output_mode; |
patrick_duc | 21:8524d815c587 | 268 | std::string comment; |
patrick_duc | 20:b0281e8a375a | 269 | |
patrick_duc | 21:8524d815c587 | 270 | uint32_t activation_nb; |
patrick_duc | 20:b0281e8a375a | 271 | |
patrick_duc | 21:8524d815c587 | 272 | Value current_value; |
patrick_duc | 21:8524d815c587 | 273 | Value previous_value; |
patrick_duc | 13:5414193da1de | 274 | }; |
patrick_duc | 13:5414193da1de | 275 | |
patrick_duc | 20:b0281e8a375a | 276 | #endif // __SERVICE_HPP__ |