Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

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?

UserRevisionLine numberNew 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__