Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

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?

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