Version FC
Dependencies: DmTftLibrary eeprom SX1280Lib filesystem mbed
Fork of MSNV2-Terminal_V1-5 by
ExtMemory.cpp@24:92c30dabfda4, 2018-09-11 (annotated)
- Committer:
- patrick_duc
- Date:
- Tue Sep 11 21:45:52 2018 +0000
- Revision:
- 24:92c30dabfda4
- Parent:
- 21:8524d815c587
- Child:
- 29:d085ab35d584
Debut d'ajout des classes de gestion et serialisation de messages.; Attention ! Classes non encore toutes fonctionnelles...; A tester au moyen du driver de test serialisation.cpp dans le repertoire TESTS.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
FCH_31 | 10:1b37e3b41947 | 1 | /* |
FCH_31 | 10:1b37e3b41947 | 2 | * MISNet |
FCH_31 | 10:1b37e3b41947 | 3 | * |
FCH_31 | 10:1b37e3b41947 | 4 | * ExtMemory: Accès EEPROM |
FCH_31 | 10:1b37e3b41947 | 5 | * |
FCH_31 | 10:1b37e3b41947 | 6 | * Created on: August 17, 2018 Author: Francis CHATAIN |
FCH_31 | 10:1b37e3b41947 | 7 | * |
FCH_31 | 10:1b37e3b41947 | 8 | */ |
FCH_31 | 10:1b37e3b41947 | 9 | |
FCH_31 | 10:1b37e3b41947 | 10 | |
FCH_31 | 10:1b37e3b41947 | 11 | // ===================================== Includes |
patrick_duc | 21:8524d815c587 | 12 | #include <cstdio> |
patrick_duc | 21:8524d815c587 | 13 | |
patrick_duc | 20:b0281e8a375a | 14 | #include "ExtMemory.hpp" |
patrick_duc | 19:4b147d8f9164 | 15 | #include "Service.hpp" |
patrick_duc | 13:5414193da1de | 16 | #include "Component.hpp" |
patrick_duc | 13:5414193da1de | 17 | #include "Payload.hpp" |
patrick_duc | 20:b0281e8a375a | 18 | |
FCH_31 | 10:1b37e3b41947 | 19 | |
patrick_duc | 20:b0281e8a375a | 20 | using namespace misnet; |
FCH_31 | 10:1b37e3b41947 | 21 | |
FCH_31 | 10:1b37e3b41947 | 22 | |
patrick_duc | 20:b0281e8a375a | 23 | // ===================================== Methods of class |
patrick_duc | 20:b0281e8a375a | 24 | |
FCH_31 | 10:1b37e3b41947 | 25 | void ExtMemory::read (DataBase* dataBase) { |
FCH_31 | 10:1b37e3b41947 | 26 | // read eeprom and initialize database |
FCH_31 | 10:1b37e3b41947 | 27 | //(Example) |
patrick_duc | 13:5414193da1de | 28 | |
patrick_duc | 20:b0281e8a375a | 29 | DEBUG( "*** EXTMEM Reading external memory ***\n"); |
patrick_duc | 13:5414193da1de | 30 | |
patrick_duc | 20:b0281e8a375a | 31 | #ifndef TEST_ENVIRONMENT |
patrick_duc | 20:b0281e8a375a | 32 | dataBase->setRadioParameter ( (uint32_t)2400000000UL, LORA_BW_0400, LORA_SF7, (int8_t)-18, (uint8_t)100, (uint16_t)2000, (uint16_t)2000) ; |
patrick_duc | 20:b0281e8a375a | 33 | #endif |
patrick_duc | 13:5414193da1de | 34 | |
patrick_duc | 13:5414193da1de | 35 | |
patrick_duc | 13:5414193da1de | 36 | /* ****************************************************************************** |
patrick_duc | 13:5414193da1de | 37 | In this example, the terminal holds 3 components : |
patrick_duc | 13:5414193da1de | 38 | * the first is a BME280 component, containing 3 sensors : |
patrick_duc | 13:5414193da1de | 39 | * a presence sensor (IPSO code = 102) |
patrick_duc | 13:5414193da1de | 40 | * a temperature sensor (IPSO code = 103) |
patrick_duc | 13:5414193da1de | 41 | * a humidity sensor (IPSO code = 104) |
patrick_duc | 13:5414193da1de | 42 | * the second is a LSM303A component, containing 2 sensors : |
patrick_duc | 13:5414193da1de | 43 | * an accelerometer sensor (IPSO code = 113) |
patrick_duc | 13:5414193da1de | 44 | * a barometer sensor (IPSO code = 115) |
patrick_duc | 13:5414193da1de | 45 | * the third one is a DS18B20 containing an actuator (audio, IPCO code = 139). |
patrick_duc | 13:5414193da1de | 46 | |
patrick_duc | 13:5414193da1de | 47 | The terminal is of type IOT_PAYLOAD_3 (why not ?). |
patrick_duc | 13:5414193da1de | 48 | ****************************************************************************** */ |
FCH_31 | 10:1b37e3b41947 | 49 | |
FCH_31 | 10:1b37e3b41947 | 50 | |
patrick_duc | 13:5414193da1de | 51 | /* ************************************************************************************** |
patrick_duc | 13:5414193da1de | 52 | Pour Hoel et Francis, de la part de Patrick : je me doute bien que les composants BME280, |
patrick_duc | 13:5414193da1de | 53 | LSM303A et DS18B20 ne contiennent pas les devices décrits ici, c'est juste un exemple ;-) |
patrick_duc | 13:5414193da1de | 54 | ************************************************************************************** */ |
patrick_duc | 13:5414193da1de | 55 | |
patrick_duc | 19:4b147d8f9164 | 56 | Service::ACCESS_PIN access_pins[6] = { 1, 2, 3, 4, 5, 6 }; |
patrick_duc | 24:92c30dabfda4 | 57 | //Value::GENERIC_VALUE generic_value = { 0.0, Value::NOT_SET }; |
patrick_duc | 24:92c30dabfda4 | 58 | |
patrick_duc | 24:92c30dabfda4 | 59 | Value delta_threshold, low_threshold_limit, high_threshold_limit; |
patrick_duc | 13:5414193da1de | 60 | |
patrick_duc | 20:b0281e8a375a | 61 | // Construction du premier service du premier composant |
patrick_duc | 13:5414193da1de | 62 | // ---------------------------------------------------- |
patrick_duc | 24:92c30dabfda4 | 63 | delta_threshold.setUint16Value(100); |
patrick_duc | 24:92c30dabfda4 | 64 | low_threshold_limit.setUint16Value(10000); |
patrick_duc | 24:92c30dabfda4 | 65 | high_threshold_limit.setUint16Value(12000); |
patrick_duc | 24:92c30dabfda4 | 66 | |
patrick_duc | 20:b0281e8a375a | 67 | Service* service1 = new Service(Service::SENSOR, |
patrick_duc | 24:92c30dabfda4 | 68 | 102, |
patrick_duc | 24:92c30dabfda4 | 69 | Service::ENABLED, |
patrick_duc | 24:92c30dabfda4 | 70 | Service::UART_, |
patrick_duc | 24:92c30dabfda4 | 71 | Service::IRQ_, |
patrick_duc | 24:92c30dabfda4 | 72 | Service::BY_DELTA, |
patrick_duc | 24:92c30dabfda4 | 73 | access_pins, |
patrick_duc | 24:92c30dabfda4 | 74 | 300, |
patrick_duc | 24:92c30dabfda4 | 75 | delta_threshold, |
patrick_duc | 24:92c30dabfda4 | 76 | low_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 77 | high_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 78 | Service::MESSAGE, |
patrick_duc | 24:92c30dabfda4 | 79 | Service::IO, |
patrick_duc | 24:92c30dabfda4 | 80 | "Premier service du composant BME280 sur cette payload"); |
patrick_duc | 13:5414193da1de | 81 | |
patrick_duc | 20:b0281e8a375a | 82 | // Construction du deuxieme service du premier composant |
patrick_duc | 13:5414193da1de | 83 | // ----------------------------------------------------- |
patrick_duc | 24:92c30dabfda4 | 84 | delta_threshold.setFloatValue(1.0); |
patrick_duc | 24:92c30dabfda4 | 85 | low_threshold_limit.setFloatValue(100.0); |
patrick_duc | 24:92c30dabfda4 | 86 | high_threshold_limit.setFloatValue(110.0); |
patrick_duc | 24:92c30dabfda4 | 87 | |
patrick_duc | 20:b0281e8a375a | 88 | Service* service2 = new Service(Service::SENSOR, |
patrick_duc | 24:92c30dabfda4 | 89 | 103, |
patrick_duc | 24:92c30dabfda4 | 90 | Service::ENABLED, |
patrick_duc | 24:92c30dabfda4 | 91 | Service::UART_, |
patrick_duc | 24:92c30dabfda4 | 92 | Service::IRQ_, |
patrick_duc | 24:92c30dabfda4 | 93 | Service::BY_RANGE, |
patrick_duc | 24:92c30dabfda4 | 94 | access_pins, |
patrick_duc | 24:92c30dabfda4 | 95 | 120, |
patrick_duc | 24:92c30dabfda4 | 96 | delta_threshold, |
patrick_duc | 24:92c30dabfda4 | 97 | low_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 98 | high_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 99 | Service::MESSAGE, |
patrick_duc | 24:92c30dabfda4 | 100 | Service::IO, |
patrick_duc | 24:92c30dabfda4 | 101 | "Deuxieme service du composant BME280 sur cette payload"); |
patrick_duc | 13:5414193da1de | 102 | |
patrick_duc | 20:b0281e8a375a | 103 | // Construction du troisieme service du premier composant |
patrick_duc | 13:5414193da1de | 104 | // ------------------------------------------------------ |
patrick_duc | 20:b0281e8a375a | 105 | Service* service3 = new Service(Service::SENSOR, |
patrick_duc | 24:92c30dabfda4 | 106 | 104, |
patrick_duc | 24:92c30dabfda4 | 107 | Service::DISABLED, |
patrick_duc | 24:92c30dabfda4 | 108 | Service::UART_, |
patrick_duc | 24:92c30dabfda4 | 109 | Service::IRQ_, |
patrick_duc | 24:92c30dabfda4 | 110 | Service::BY_DELTA, |
patrick_duc | 24:92c30dabfda4 | 111 | access_pins, |
patrick_duc | 24:92c30dabfda4 | 112 | 30, |
patrick_duc | 24:92c30dabfda4 | 113 | delta_threshold, |
patrick_duc | 24:92c30dabfda4 | 114 | low_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 115 | high_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 116 | Service::MESSAGE, |
patrick_duc | 24:92c30dabfda4 | 117 | Service::IO, |
patrick_duc | 24:92c30dabfda4 | 118 | "Troisieme service du composant BME280 sur cette payload"); |
patrick_duc | 13:5414193da1de | 119 | |
patrick_duc | 13:5414193da1de | 120 | // Construction du premier composant |
patrick_duc | 13:5414193da1de | 121 | // --------------------------------- |
patrick_duc | 20:b0281e8a375a | 122 | std::vector<Service*> services = std::vector<Service*>(); |
patrick_duc | 20:b0281e8a375a | 123 | services.push_back(service1); |
patrick_duc | 20:b0281e8a375a | 124 | services.push_back(service2); |
patrick_duc | 20:b0281e8a375a | 125 | services.push_back(service3); |
patrick_duc | 13:5414193da1de | 126 | |
patrick_duc | 20:b0281e8a375a | 127 | Component* component1 = new Component(Component::BME280, services); |
patrick_duc | 13:5414193da1de | 128 | |
patrick_duc | 20:b0281e8a375a | 129 | // Construction du premier service du deuxieme composant |
patrick_duc | 13:5414193da1de | 130 | // ----------------------------------------------------- |
patrick_duc | 24:92c30dabfda4 | 131 | delta_threshold.setInt8Value(2); |
patrick_duc | 24:92c30dabfda4 | 132 | low_threshold_limit.setInt8Value(100); |
patrick_duc | 24:92c30dabfda4 | 133 | high_threshold_limit.setInt8Value(110); |
patrick_duc | 24:92c30dabfda4 | 134 | |
patrick_duc | 20:b0281e8a375a | 135 | Service* service4 = new Service(Service::SENSOR, |
patrick_duc | 24:92c30dabfda4 | 136 | 113, |
patrick_duc | 24:92c30dabfda4 | 137 | Service::ENABLED, |
patrick_duc | 24:92c30dabfda4 | 138 | Service::UART_, |
patrick_duc | 24:92c30dabfda4 | 139 | Service::IRQ_, |
patrick_duc | 24:92c30dabfda4 | 140 | Service::BY_DELTA, |
patrick_duc | 24:92c30dabfda4 | 141 | access_pins, |
patrick_duc | 24:92c30dabfda4 | 142 | 60, |
patrick_duc | 24:92c30dabfda4 | 143 | delta_threshold, |
patrick_duc | 24:92c30dabfda4 | 144 | low_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 145 | high_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 146 | Service::MESSAGE, |
patrick_duc | 24:92c30dabfda4 | 147 | Service::IO, |
patrick_duc | 24:92c30dabfda4 | 148 | "Premier service du composant LSM303A sur cette payload"); |
patrick_duc | 13:5414193da1de | 149 | |
patrick_duc | 20:b0281e8a375a | 150 | // Construction du deuxieme service du deuxieme composant |
patrick_duc | 13:5414193da1de | 151 | // ------------------------------------------------------ |
patrick_duc | 20:b0281e8a375a | 152 | Service* service5 = new Service(Service::SENSOR, |
patrick_duc | 24:92c30dabfda4 | 153 | 115, |
patrick_duc | 24:92c30dabfda4 | 154 | Service::DISABLED, |
patrick_duc | 24:92c30dabfda4 | 155 | Service::UART_, |
patrick_duc | 24:92c30dabfda4 | 156 | Service::IRQ_, |
patrick_duc | 24:92c30dabfda4 | 157 | Service::BY_DELTA, |
patrick_duc | 24:92c30dabfda4 | 158 | access_pins, |
patrick_duc | 24:92c30dabfda4 | 159 | 80, |
patrick_duc | 24:92c30dabfda4 | 160 | delta_threshold, |
patrick_duc | 24:92c30dabfda4 | 161 | low_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 162 | high_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 163 | Service::MESSAGE, |
patrick_duc | 24:92c30dabfda4 | 164 | Service::IO, |
patrick_duc | 24:92c30dabfda4 | 165 | "Deuxieme service du composant LSM303A sur cette payload"); |
patrick_duc | 13:5414193da1de | 166 | |
patrick_duc | 13:5414193da1de | 167 | // Construction du deuxieme composant |
patrick_duc | 13:5414193da1de | 168 | // ---------------------------------- |
patrick_duc | 20:b0281e8a375a | 169 | services.clear(); |
patrick_duc | 20:b0281e8a375a | 170 | services.push_back(service4); |
patrick_duc | 20:b0281e8a375a | 171 | services.push_back(service5); |
patrick_duc | 13:5414193da1de | 172 | |
patrick_duc | 20:b0281e8a375a | 173 | Component* component2 = new Component(Component::LSM303A, services); |
patrick_duc | 13:5414193da1de | 174 | |
patrick_duc | 13:5414193da1de | 175 | |
patrick_duc | 20:b0281e8a375a | 176 | // Construction du premier service du troisieme composant |
patrick_duc | 13:5414193da1de | 177 | // ------------------------------------------------------ |
patrick_duc | 24:92c30dabfda4 | 178 | delta_threshold.setDoubleValue(1.0); |
patrick_duc | 24:92c30dabfda4 | 179 | low_threshold_limit.setDoubleValue(0.0); |
patrick_duc | 24:92c30dabfda4 | 180 | high_threshold_limit.setDoubleValue(1.0); |
patrick_duc | 24:92c30dabfda4 | 181 | |
patrick_duc | 20:b0281e8a375a | 182 | Service* service6 = new Service(Service::ACTUATOR, |
patrick_duc | 24:92c30dabfda4 | 183 | 139, |
patrick_duc | 24:92c30dabfda4 | 184 | Service::ENABLED, |
patrick_duc | 24:92c30dabfda4 | 185 | Service::UART_, |
patrick_duc | 24:92c30dabfda4 | 186 | Service::IRQ_, |
patrick_duc | 24:92c30dabfda4 | 187 | Service::BY_RANGE, |
patrick_duc | 24:92c30dabfda4 | 188 | access_pins, |
patrick_duc | 24:92c30dabfda4 | 189 | 50, |
patrick_duc | 24:92c30dabfda4 | 190 | delta_threshold, |
patrick_duc | 24:92c30dabfda4 | 191 | low_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 192 | high_threshold_limit, |
patrick_duc | 24:92c30dabfda4 | 193 | Service::MESSAGE, |
patrick_duc | 24:92c30dabfda4 | 194 | Service::IO, |
patrick_duc | 24:92c30dabfda4 | 195 | "Premier service du composant DS18B20 sur cette payload"); |
patrick_duc | 13:5414193da1de | 196 | |
patrick_duc | 13:5414193da1de | 197 | // Construction du troisieme composant |
patrick_duc | 13:5414193da1de | 198 | // ----------------------------------- |
patrick_duc | 20:b0281e8a375a | 199 | services.clear(); |
patrick_duc | 20:b0281e8a375a | 200 | services.push_back(service6); |
patrick_duc | 13:5414193da1de | 201 | |
patrick_duc | 20:b0281e8a375a | 202 | Component* component3 = new Component(Component::DS18B20, services); |
patrick_duc | 13:5414193da1de | 203 | |
patrick_duc | 13:5414193da1de | 204 | |
patrick_duc | 13:5414193da1de | 205 | // Construction de la payload |
patrick_duc | 13:5414193da1de | 206 | // -------------------------- |
patrick_duc | 18:d5e7e56b0a0d | 207 | std::vector<Component*> components = std::vector<Component*>(); |
patrick_duc | 13:5414193da1de | 208 | components.push_back(component1); |
patrick_duc | 13:5414193da1de | 209 | components.push_back(component2); |
patrick_duc | 13:5414193da1de | 210 | components.push_back(component3); |
patrick_duc | 13:5414193da1de | 211 | |
patrick_duc | 20:b0281e8a375a | 212 | Payload * payload = new Payload(Payload::IOT_PAYLOAD_3, components, 10000); |
patrick_duc | 20:b0281e8a375a | 213 | |
patrick_duc | 20:b0281e8a375a | 214 | /* Payload sampling information, based on this example |
patrick_duc | 20:b0281e8a375a | 215 | --------------------------------------------------- |
patrick_duc | 20:b0281e8a375a | 216 | - Payload base period is 10000, which means 176 microseconds * 10000, i.e. 1.76 seconds |
patrick_duc | 20:b0281e8a375a | 217 | - Service 1 : subsample rate is 300, so the service sampling period is 528 seconds |
patrick_duc | 20:b0281e8a375a | 218 | - Service 2 : subsample rate is 120, so the service sampling period is 211.2 seconds |
patrick_duc | 20:b0281e8a375a | 219 | - Service 3 : subsample rate is 30, so the service sampling period is 52.8 seconds |
patrick_duc | 20:b0281e8a375a | 220 | - Service 4 : subsample rate is 60, so the service sampling period is 105.6 seconds |
patrick_duc | 20:b0281e8a375a | 221 | - Service 5 : subsample rate is 80, so the service sampling period is 140.8 seconds |
patrick_duc | 20:b0281e8a375a | 222 | - Service 6 : subsample rate is 50, so the service sampling period is 35.2 seconds |
patrick_duc | 20:b0281e8a375a | 223 | - GCD (Greatest Common Divisor) of its services is 10, so the payload will be awaken |
patrick_duc | 20:b0281e8a375a | 224 | every 17.6 seconds. |
patrick_duc | 20:b0281e8a375a | 225 | */ |
patrick_duc | 13:5414193da1de | 226 | |
patrick_duc | 13:5414193da1de | 227 | // Enregistrement de la payload dans la database |
patrick_duc | 13:5414193da1de | 228 | // --------------------------------------------- |
patrick_duc | 13:5414193da1de | 229 | dataBase->setPayload(payload); |
patrick_duc | 13:5414193da1de | 230 | } |