Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
patrick_duc
Date:
Fri Oct 19 15:08:35 2018 +0000
Branch:
Integration
Revision:
39:13e66d087ae9
Parent:
38:9b43b2415093
Child:
40:b20720f79e0a
Suite d'int?gration (ne compile pas encore).

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 39:13e66d087ae9 12 #include "eeprom.h"
patrick_duc 39:13e66d087ae9 13
patrick_duc 20:b0281e8a375a 14 #include "ExtMemory.hpp"
patrick_duc 38:9b43b2415093 15
patrick_duc 38:9b43b2415093 16 #ifdef TEST_ENVIRONMENT
patrick_duc 38:9b43b2415093 17 #include "ConcreteService.hpp"
patrick_duc 39:13e66d087ae9 18 #else
patrick_duc 39:13e66d087ae9 19 #define EEPROM_ADDR 0x0 // I2c EEPROM address is 0x00
patrick_duc 38:9b43b2415093 20 #endif
patrick_duc 38:9b43b2415093 21
patrick_duc 13:5414193da1de 22 #include "Component.hpp"
patrick_duc 13:5414193da1de 23 #include "Payload.hpp"
patrick_duc 20:b0281e8a375a 24
patrick_duc 38:9b43b2415093 25
patrick_duc 20:b0281e8a375a 26 using namespace misnet;
FCH_31 10:1b37e3b41947 27
patrick_duc 38:9b43b2415093 28
patrick_duc 20:b0281e8a375a 29 // ===================================== Methods of class
patrick_duc 20:b0281e8a375a 30
FCH_31 10:1b37e3b41947 31 void ExtMemory::read (DataBase* dataBase) {
FCH_31 10:1b37e3b41947 32 // read eeprom and initialize database
FCH_31 10:1b37e3b41947 33 //(Example)
patrick_duc 13:5414193da1de 34
patrick_duc 38:9b43b2415093 35 DEBUG("*** EXTMEM Reading external memory ***\n");
patrick_duc 38:9b43b2415093 36
patrick_duc 38:9b43b2415093 37 #ifndef TEST_ENVIRONMENT
lo 29:d085ab35d584 38 uint8_t componentID=0xff;
lo 29:d085ab35d584 39 int16_t servicesNbr=0, servicesTotal=0;
lo 29:d085ab35d584 40 int32_t pos=0;
lo 29:d085ab35d584 41 ServiceDefinition sd,prev_sd;
lo 29:d085ab35d584 42 Header hd;
lo 29:d085ab35d584 43 EEPROM ep(I2C_SDA, I2C_SCL, EEPROM_ADDR, EEPROM::T24C04);
patrick_duc 38:9b43b2415093 44 #endif
lo 29:d085ab35d584 45
patrick_duc 38:9b43b2415093 46
patrick_duc 38:9b43b2415093 47 #ifdef TEST_ENVIRONMENT
patrick_duc 38:9b43b2415093 48 /* ******************************************************************************
patrick_duc 38:9b43b2415093 49 In this example, the terminal holds 3 components :
patrick_duc 38:9b43b2415093 50 * the first is a BME280 component, containing 3 sensors :
patrick_duc 38:9b43b2415093 51 * a presence sensor (IPSO code = 102)
patrick_duc 38:9b43b2415093 52 * a temperature sensor (IPSO code = 103)
patrick_duc 38:9b43b2415093 53 * a humidity sensor (IPSO code = 104)
patrick_duc 38:9b43b2415093 54 * the second is a LSM303A component, containing 2 sensors :
patrick_duc 38:9b43b2415093 55 * an accelerometer sensor (IPSO code = 113)
patrick_duc 38:9b43b2415093 56 * a barometer sensor (IPSO code = 115)
patrick_duc 38:9b43b2415093 57 * the third one is a DS18B20 containing an actuator (audio, IPCO code = 139).
patrick_duc 38:9b43b2415093 58
patrick_duc 38:9b43b2415093 59 The terminal is of type IOT_PAYLOAD_3 (why not ?).
patrick_duc 38:9b43b2415093 60 ****************************************************************************** */
patrick_duc 38:9b43b2415093 61
patrick_duc 38:9b43b2415093 62
patrick_duc 38:9b43b2415093 63 /* **************************************************************************************
patrick_duc 38:9b43b2415093 64 Pour Hoel et Francis, de la part de Patrick : je me doute bien que les composants BME280,
patrick_duc 38:9b43b2415093 65 LSM303A et DS18B20 ne contiennent pas les devices décrits ici, c'est juste un exemple ;-)
patrick_duc 38:9b43b2415093 66 ************************************************************************************** */
patrick_duc 38:9b43b2415093 67
patrick_duc 38:9b43b2415093 68 Service::ACCESS_PIN access_pins[6] = {1, 2, 3, 4, 5, 6};
patrick_duc 38:9b43b2415093 69 //Value::GENERIC_VALUE generic_value = { 0.0, Value::NOT_SET };
patrick_duc 38:9b43b2415093 70
patrick_duc 38:9b43b2415093 71 Value delta_threshold, low_threshold_limit, high_threshold_limit;
patrick_duc 38:9b43b2415093 72
patrick_duc 38:9b43b2415093 73 std::vector<Service*> services = std::vector<Service*>();
patrick_duc 38:9b43b2415093 74
patrick_duc 38:9b43b2415093 75 // Construction du premier composant
patrick_duc 38:9b43b2415093 76 // ---------------------------------
patrick_duc 38:9b43b2415093 77 Component* component1 = new Component(Component::BME280, services);
patrick_duc 38:9b43b2415093 78
patrick_duc 38:9b43b2415093 79 // Construction du premier service du premier composant
patrick_duc 38:9b43b2415093 80 // ----------------------------------------------------
patrick_duc 38:9b43b2415093 81 delta_threshold.setUint16Value(100);
patrick_duc 38:9b43b2415093 82 low_threshold_limit.setUint16Value(10000);
patrick_duc 38:9b43b2415093 83 high_threshold_limit.setUint16Value(12000);
patrick_duc 38:9b43b2415093 84
patrick_duc 38:9b43b2415093 85 Service* service1 = new ConcreteService(misnet::Service::SENSOR,
patrick_duc 38:9b43b2415093 86 102,
patrick_duc 38:9b43b2415093 87 1,
patrick_duc 38:9b43b2415093 88 misnet::Value::UINT16_T,
patrick_duc 38:9b43b2415093 89 Service::ENABLED,
patrick_duc 38:9b43b2415093 90 Service::UART_,
patrick_duc 38:9b43b2415093 91 Service::READ_BY_IRQ,
patrick_duc 38:9b43b2415093 92 Service::BY_DELTA,
patrick_duc 38:9b43b2415093 93 access_pins,
patrick_duc 38:9b43b2415093 94 300,
patrick_duc 38:9b43b2415093 95 delta_threshold,
patrick_duc 38:9b43b2415093 96 low_threshold_limit,
patrick_duc 38:9b43b2415093 97 high_threshold_limit,
patrick_duc 38:9b43b2415093 98 Service::MESSAGE,
patrick_duc 38:9b43b2415093 99 Service::IO,
patrick_duc 38:9b43b2415093 100 "Premier service du composant BME280 sur cette payload",
patrick_duc 38:9b43b2415093 101 component1);
patrick_duc 38:9b43b2415093 102
patrick_duc 38:9b43b2415093 103 // Construction du deuxieme service du premier composant
patrick_duc 38:9b43b2415093 104 // -----------------------------------------------------
patrick_duc 38:9b43b2415093 105 delta_threshold.setFloatValue(1.0);
patrick_duc 38:9b43b2415093 106 low_threshold_limit.setFloatValue(100.0);
patrick_duc 38:9b43b2415093 107 high_threshold_limit.setFloatValue(110.0);
patrick_duc 38:9b43b2415093 108
patrick_duc 38:9b43b2415093 109 Service* service2 = new ConcreteService(Service::SENSOR,
patrick_duc 38:9b43b2415093 110 103,
patrick_duc 38:9b43b2415093 111 2,
patrick_duc 38:9b43b2415093 112 misnet::Value::FLOAT,
patrick_duc 38:9b43b2415093 113 Service::ENABLED,
patrick_duc 38:9b43b2415093 114 Service::UART_,
patrick_duc 38:9b43b2415093 115 Service::READ_BY_IRQ,
patrick_duc 38:9b43b2415093 116 Service::BY_RANGE,
patrick_duc 38:9b43b2415093 117 access_pins,
patrick_duc 38:9b43b2415093 118 120,
patrick_duc 38:9b43b2415093 119 delta_threshold,
patrick_duc 38:9b43b2415093 120 low_threshold_limit,
patrick_duc 38:9b43b2415093 121 high_threshold_limit,
patrick_duc 38:9b43b2415093 122 Service::MESSAGE,
patrick_duc 38:9b43b2415093 123 Service::IO,
patrick_duc 38:9b43b2415093 124 "Deuxieme service du composant BME280 sur cette payload",
patrick_duc 38:9b43b2415093 125 component1);
patrick_duc 38:9b43b2415093 126
patrick_duc 38:9b43b2415093 127 // Construction du troisieme service du premier composant
patrick_duc 38:9b43b2415093 128 // ------------------------------------------------------
patrick_duc 38:9b43b2415093 129 Service* service3 = new ConcreteService(Service::SENSOR,
patrick_duc 38:9b43b2415093 130 104,
patrick_duc 38:9b43b2415093 131 3,
patrick_duc 38:9b43b2415093 132 misnet::Value::FLOAT,
patrick_duc 38:9b43b2415093 133 Service::DISABLED,
patrick_duc 38:9b43b2415093 134 Service::UART_,
patrick_duc 38:9b43b2415093 135 Service::READ_BY_IRQ,
patrick_duc 38:9b43b2415093 136 Service::BY_DELTA,
patrick_duc 38:9b43b2415093 137 access_pins,
patrick_duc 38:9b43b2415093 138 30,
patrick_duc 38:9b43b2415093 139 delta_threshold,
patrick_duc 38:9b43b2415093 140 low_threshold_limit,
patrick_duc 38:9b43b2415093 141 high_threshold_limit,
patrick_duc 38:9b43b2415093 142 Service::MESSAGE,
patrick_duc 38:9b43b2415093 143 Service::IO,
patrick_duc 38:9b43b2415093 144 "Troisieme service du composant BME280 sur cette payload",
patrick_duc 38:9b43b2415093 145 component1);
patrick_duc 38:9b43b2415093 146
patrick_duc 38:9b43b2415093 147 // Insertion des services du premier composant
patrick_duc 38:9b43b2415093 148 // -------------------------------------------
patrick_duc 38:9b43b2415093 149 component1->getServices().push_back(service1);
patrick_duc 38:9b43b2415093 150 component1->getServices().push_back(service2);
patrick_duc 38:9b43b2415093 151 component1->getServices().push_back(service3);
patrick_duc 38:9b43b2415093 152
patrick_duc 13:5414193da1de 153
patrick_duc 38:9b43b2415093 154 // Construction du deuxieme composant
patrick_duc 38:9b43b2415093 155 // ----------------------------------
patrick_duc 38:9b43b2415093 156 Component* component2 = new Component(Component::LSM303A, services);
patrick_duc 38:9b43b2415093 157
patrick_duc 38:9b43b2415093 158 // Construction du premier service du deuxieme composant
patrick_duc 38:9b43b2415093 159 // -----------------------------------------------------
patrick_duc 38:9b43b2415093 160 delta_threshold.setInt8Value(2);
patrick_duc 38:9b43b2415093 161 low_threshold_limit.setInt8Value(100);
patrick_duc 38:9b43b2415093 162 high_threshold_limit.setInt8Value(110);
patrick_duc 38:9b43b2415093 163
patrick_duc 38:9b43b2415093 164 Service* service4 = new ConcreteService(Service::SENSOR,
patrick_duc 38:9b43b2415093 165 113,
patrick_duc 38:9b43b2415093 166 4,
patrick_duc 38:9b43b2415093 167 misnet::Value::INT8_T,
patrick_duc 38:9b43b2415093 168 Service::ENABLED,
patrick_duc 38:9b43b2415093 169 Service::UART_,
patrick_duc 38:9b43b2415093 170 Service::SYNCHRONOUS_READ,
patrick_duc 38:9b43b2415093 171 Service::BY_DELTA,
patrick_duc 38:9b43b2415093 172 access_pins,
patrick_duc 38:9b43b2415093 173 60,
patrick_duc 38:9b43b2415093 174 delta_threshold,
patrick_duc 38:9b43b2415093 175 low_threshold_limit,
patrick_duc 38:9b43b2415093 176 high_threshold_limit,
patrick_duc 38:9b43b2415093 177 Service::MESSAGE,
patrick_duc 38:9b43b2415093 178 Service::IO,
patrick_duc 38:9b43b2415093 179 "Premier service du composant LSM303A sur cette payload",
patrick_duc 38:9b43b2415093 180 component2);
patrick_duc 38:9b43b2415093 181
patrick_duc 38:9b43b2415093 182 // Construction du deuxieme service du deuxieme composant
patrick_duc 38:9b43b2415093 183 // ------------------------------------------------------
patrick_duc 38:9b43b2415093 184 Service* service5 = new ConcreteService(Service::SENSOR,
patrick_duc 38:9b43b2415093 185 115,
patrick_duc 38:9b43b2415093 186 5,
patrick_duc 38:9b43b2415093 187 misnet::Value::INT8_T,
patrick_duc 38:9b43b2415093 188 Service::DISABLED,
patrick_duc 38:9b43b2415093 189 Service::UART_,
patrick_duc 38:9b43b2415093 190 Service::SYNCHRONOUS_READ,
patrick_duc 38:9b43b2415093 191 Service::BY_DELTA,
patrick_duc 38:9b43b2415093 192 access_pins,
patrick_duc 38:9b43b2415093 193 80,
patrick_duc 38:9b43b2415093 194 delta_threshold,
patrick_duc 38:9b43b2415093 195 low_threshold_limit,
patrick_duc 38:9b43b2415093 196 high_threshold_limit,
patrick_duc 38:9b43b2415093 197 Service::MESSAGE,
patrick_duc 38:9b43b2415093 198 Service::IO,
patrick_duc 38:9b43b2415093 199 "Deuxieme service du composant LSM303A sur cette payload",
patrick_duc 38:9b43b2415093 200 component2);
patrick_duc 38:9b43b2415093 201
patrick_duc 38:9b43b2415093 202 // Insertion des services du deuxieme composant
patrick_duc 38:9b43b2415093 203 // --------------------------------------------
patrick_duc 38:9b43b2415093 204 component2->getServices().push_back(service4);
patrick_duc 38:9b43b2415093 205 component2->getServices().push_back(service5);
patrick_duc 38:9b43b2415093 206
patrick_duc 38:9b43b2415093 207
patrick_duc 38:9b43b2415093 208 // Construction du troisieme composant
patrick_duc 38:9b43b2415093 209 // -----------------------------------
patrick_duc 38:9b43b2415093 210 Component* component3 = new Component(Component::DS18B20, services);
patrick_duc 38:9b43b2415093 211
patrick_duc 38:9b43b2415093 212 // Construction du premier service du troisieme composant
patrick_duc 38:9b43b2415093 213 // ------------------------------------------------------
patrick_duc 38:9b43b2415093 214 delta_threshold.setDoubleValue(1.0);
patrick_duc 38:9b43b2415093 215 low_threshold_limit.setDoubleValue(0.0);
patrick_duc 38:9b43b2415093 216 high_threshold_limit.setDoubleValue(1.0);
patrick_duc 38:9b43b2415093 217
patrick_duc 38:9b43b2415093 218 Service* service6 = new ConcreteService(Service::ACTUATOR,
patrick_duc 38:9b43b2415093 219 139,
patrick_duc 38:9b43b2415093 220 6,
patrick_duc 38:9b43b2415093 221 misnet::Value::DOUBLE,
patrick_duc 38:9b43b2415093 222 Service::ENABLED,
patrick_duc 38:9b43b2415093 223 Service::UART_,
patrick_duc 38:9b43b2415093 224 Service::SYNCHRONOUS_READ,
patrick_duc 38:9b43b2415093 225 Service::BY_RANGE,
patrick_duc 38:9b43b2415093 226 access_pins,
patrick_duc 38:9b43b2415093 227 50,
patrick_duc 38:9b43b2415093 228 delta_threshold,
patrick_duc 38:9b43b2415093 229 low_threshold_limit,
patrick_duc 38:9b43b2415093 230 high_threshold_limit,
patrick_duc 38:9b43b2415093 231 Service::MESSAGE,
patrick_duc 38:9b43b2415093 232 Service::IO,
patrick_duc 38:9b43b2415093 233 "Premier service du composant DS18B20 sur cette payload",
patrick_duc 38:9b43b2415093 234 component3);
patrick_duc 38:9b43b2415093 235
patrick_duc 38:9b43b2415093 236 // Insertion des services du troisieme composant
patrick_duc 38:9b43b2415093 237 // ---------------------------------------------
patrick_duc 38:9b43b2415093 238 component3->getServices().push_back(service6);
patrick_duc 38:9b43b2415093 239
patrick_duc 38:9b43b2415093 240
patrick_duc 38:9b43b2415093 241 // Construction de la payload
patrick_duc 38:9b43b2415093 242 // --------------------------
patrick_duc 38:9b43b2415093 243 std::vector<Component*> components = std::vector<Component*>();
patrick_duc 38:9b43b2415093 244 components.push_back(component1);
patrick_duc 38:9b43b2415093 245 components.push_back(component2);
patrick_duc 38:9b43b2415093 246 components.push_back(component3);
patrick_duc 38:9b43b2415093 247
patrick_duc 38:9b43b2415093 248 Payload * payload = new Payload(Payload::IOT_PAYLOAD_3, components, 10000);
patrick_duc 38:9b43b2415093 249
patrick_duc 38:9b43b2415093 250 /* Payload sampling information, based on this example
patrick_duc 38:9b43b2415093 251 ---------------------------------------------------
patrick_duc 38:9b43b2415093 252 - Payload base period is 10000, which means 176 microseconds * 10000, i.e. 1.76 seconds
patrick_duc 38:9b43b2415093 253 - Service 1 : subsample rate is 300, so the service sampling period is 528 seconds
patrick_duc 38:9b43b2415093 254 - Service 2 : subsample rate is 120, so the service sampling period is 211.2 seconds
patrick_duc 38:9b43b2415093 255 - Service 3 : subsample rate is 30, so the service sampling period is 52.8 seconds
patrick_duc 38:9b43b2415093 256 - Service 4 : subsample rate is 60, so the service sampling period is 105.6 seconds
patrick_duc 38:9b43b2415093 257 - Service 5 : subsample rate is 80, so the service sampling period is 140.8 seconds
patrick_duc 38:9b43b2415093 258 - Service 6 : subsample rate is 50, so the service sampling period is 35.2 seconds
patrick_duc 38:9b43b2415093 259 - GCD (Greatest Common Divisor) of its services is 10, so the payload will be awaken
patrick_duc 38:9b43b2415093 260 every 17.6 seconds.
patrick_duc 38:9b43b2415093 261 */
patrick_duc 38:9b43b2415093 262
patrick_duc 38:9b43b2415093 263 // Enregistrement de la payload dans la database
patrick_duc 38:9b43b2415093 264 // ---------------------------------------------
patrick_duc 38:9b43b2415093 265 dataBase.setPayload(payload);
patrick_duc 38:9b43b2415093 266
patrick_duc 38:9b43b2415093 267 #else
patrick_duc 20:b0281e8a375a 268 dataBase->setRadioParameter ( (uint32_t)2400000000UL, LORA_BW_0400, LORA_SF7, (int8_t)-18, (uint8_t)100, (uint16_t)2000, (uint16_t)2000) ;
patrick_duc 13:5414193da1de 269
lo 29:d085ab35d584 270 // ---- read header block
lo 29:d085ab35d584 271 ep.read(pos, (void *) &hd, sizeof(hd));
lo 29:d085ab35d584 272 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 273 pos += sizeof(hd);
lo 29:d085ab35d584 274 DEBUG("*** [reading header] services:%d mode:0x%02x payloadID:0x%04x ***\n",
lo 29:d085ab35d584 275 hd.nb_of_services, hd.operating_mode, hd.payload_id);
lo 29:d085ab35d584 276 servicesTotal = hd.nb_of_services; //dataBase.getNbService()
lo 29:d085ab35d584 277
lo 29:d085ab35d584 278 // ---- read services blocks
lo 29:d085ab35d584 279 std::vector<Component*> components = std::vector<Component*>();
lo 29:d085ab35d584 280 std::vector<Service*> services = std::vector<Service*>();
lo 29:d085ab35d584 281 Component* component;
lo 29:d085ab35d584 282 std::string name[6] = {"HTS221","LPS22HB","LSM303D","LSM6DSL","BME280","DS18B20"}; // debug purpose
lo 29:d085ab35d584 283 while(servicesNbr<servicesTotal){
lo 29:d085ab35d584 284 while(ep.read(pos, (void *) &sd, sizeof(sd)),(servicesNbr<servicesTotal)){
lo 29:d085ab35d584 285 pos += sizeof(sd);
lo 29:d085ab35d584 286 if (ep.getError() != 0) { error(ep.getErrorMessage()); continue;}
lo 29:d085ab35d584 287 // TODO STATE field is missing in ServiceDefinition
lo 29:d085ab35d584 288 // TODO access pins
patrick_duc 33:6ae45cba7958 289 // Service::ACCESS_PIN access_pins[6] = { 1, 2, 3, 4, 5, 6 };
lo 29:d085ab35d584 290 Service* service;
patrick_duc 36:14a8da4108d5 291 // = new Service((misnet::Service::SERVICE_TYPE) sd.service_type,
lo 29:d085ab35d584 292 // sd.mistnet_code,
lo 29:d085ab35d584 293 // Service::ENABLED,
lo 29:d085ab35d584 294 // (misnet::Service::ACCESS_TYPE) sd.access_type,
lo 29:d085ab35d584 295 // (misnet::Service::REQUEST_MODE) sd.request_mode,
lo 29:d085ab35d584 296 // (misnet::Service::UP_MODE) sd.up_mode,
lo 29:d085ab35d584 297 // access_pins,
lo 29:d085ab35d584 298 // sd.subsample_rate,
lo 29:d085ab35d584 299 // (misnet::Service::ACTION) sd.action,
lo 29:d085ab35d584 300 // (misnet::Service::OUTPUT_MODE) sd.output,
lo 29:d085ab35d584 301 // sd.comment);
lo 29:d085ab35d584 302 if( componentID == 255 ) componentID = sd.component_id;
lo 29:d085ab35d584 303 if( (sd.component_id != componentID) || (servicesNbr == servicesTotal-1) ){
lo 29:d085ab35d584 304 if(servicesNbr == servicesTotal-1) services.push_back(service);
lo 29:d085ab35d584 305 // component = new Component((misnet::Component::COMPONENT_ID) prev_sd.component_id, services);
lo 29:d085ab35d584 306 components.push_back(component);
lo 29:d085ab35d584 307 DEBUG("push component code %d [%s] to vector (%d services)\n",prev_sd.component_id,name[component->getId()-1].c_str(),services.size());
lo 29:d085ab35d584 308 services.clear();
lo 29:d085ab35d584 309 }
lo 29:d085ab35d584 310 services.push_back(service);
lo 29:d085ab35d584 311 prev_sd = sd;
lo 29:d085ab35d584 312 componentID = sd.component_id;
lo 29:d085ab35d584 313 servicesNbr += 1;
lo 29:d085ab35d584 314 }
lo 29:d085ab35d584 315 services.clear();
lo 29:d085ab35d584 316 DEBUG("\n");
lo 29:d085ab35d584 317 }
lo 29:d085ab35d584 318 Payload * payload = new Payload((misnet::Payload::PAYLOAD_ID) hd.payload_id, components, hd.payload_base_period);
lo 29:d085ab35d584 319 dataBase->setPayload(payload);
patrick_duc 38:9b43b2415093 320 #endif
patrick_duc 38:9b43b2415093 321 }
FCH_31 10:1b37e3b41947 322
FCH_31 10:1b37e3b41947 323
lo 29:d085ab35d584 324 void ExtMemory::populate (void) {
patrick_duc 24:92c30dabfda4 325
lo 29:d085ab35d584 326 int32_t pos=0;
lo 29:d085ab35d584 327 ServiceDefinition sd, sd_r;
lo 29:d085ab35d584 328 Header hd, hd_r;
lo 29:d085ab35d584 329 EEPROM ep(I2C_SDA, I2C_SCL, EEPROM_ADDR, EEPROM::T24C04);
patrick_duc 13:5414193da1de 330
lo 29:d085ab35d584 331 // -----------header----------
lo 29:d085ab35d584 332 hd.nb_of_services = 5;
lo 29:d085ab35d584 333 hd.nb_of_sensors = 3;
lo 29:d085ab35d584 334 hd.operating_mode = 0x09;
lo 29:d085ab35d584 335 hd.payload_id = 0x1234;
lo 29:d085ab35d584 336 ep.write((uint32_t) (pos), (void *) &hd, sizeof(hd));
lo 29:d085ab35d584 337 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 338 ep.read((uint32_t) (pos), (void *) &hd_r, sizeof(hd_r));
lo 29:d085ab35d584 339 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 340 pos += sizeof(hd);
lo 29:d085ab35d584 341 printf("*** [writing header] services:%d mode:0x%02x payloadID:0x%04x***\n",
lo 29:d085ab35d584 342 hd_r.nb_of_services, hd_r.operating_mode, hd_r.payload_id);
patrick_duc 13:5414193da1de 343
patrick_duc 13:5414193da1de 344
lo 29:d085ab35d584 345 // ---------services----------
lo 29:d085ab35d584 346 sd.component_id = Component::DS18B20;
patrick_duc 36:14a8da4108d5 347 sd.service_type = Service::SERVICE_TYPE::SENSOR;
lo 29:d085ab35d584 348 sd.mistnet_code = 0x5f;
lo 29:d085ab35d584 349 strcpy(sd.comment,"DS1_TEMP");
lo 29:d085ab35d584 350 ep.write((uint32_t) (pos), (void *) &sd, sizeof(sd));
lo 29:d085ab35d584 351 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 352 ep.read((uint32_t) (pos), (void *) &sd_r, sizeof(sd_r));
lo 29:d085ab35d584 353 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 354 pos += sizeof(sd);
lo 29:d085ab35d584 355 printf("service1 ID:0x%02x type:0x%02x code:0x%04x\n",
patrick_duc 36:14a8da4108d5 356 sd_r.component_id, sd_r.service_type, sd_r.mistnet_code);
patrick_duc 24:92c30dabfda4 357
lo 29:d085ab35d584 358 sd.component_id = Component::LSM303D;
patrick_duc 36:14a8da4108d5 359 sd.service_type = Service::SERVICE_TYPE::SENSOR;
lo 29:d085ab35d584 360 sd.mistnet_code = 0x2b;
lo 29:d085ab35d584 361 strcpy(sd.comment,"LSM_ACCEL");
lo 29:d085ab35d584 362 ep.write((uint32_t) (pos), (void *) &sd, sizeof(sd));
lo 29:d085ab35d584 363 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 364 ep.read((uint32_t) (pos), (void *) &sd_r, sizeof(sd_r));
lo 29:d085ab35d584 365 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 366 pos += sizeof(sd);
lo 29:d085ab35d584 367 printf("service2 ID:0x%02x type:0x%02x code:0x%04x\n",
patrick_duc 36:14a8da4108d5 368 sd_r.component_id, sd_r.service_type, sd_r.mistnet_code);
patrick_duc 13:5414193da1de 369
lo 29:d085ab35d584 370 sd.component_id = Component::BME280;
patrick_duc 36:14a8da4108d5 371 sd.service_type = Service::SERVICE_TYPE::SENSOR;
lo 29:d085ab35d584 372 sd.mistnet_code = 0x4a;
lo 29:d085ab35d584 373 strcpy(sd.comment,"BME_TEMP");
lo 29:d085ab35d584 374 ep.write((uint32_t) (pos), (void *) &sd, sizeof(sd));
lo 29:d085ab35d584 375 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 376 ep.read((uint32_t) (pos), (void *) &sd_r, sizeof(sd_r));
lo 29:d085ab35d584 377 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 378 pos += sizeof(sd);
lo 29:d085ab35d584 379 printf("service3 ID:0x%02x type:0x%02x code:0x%04x\n",
patrick_duc 36:14a8da4108d5 380 sd_r.component_id, sd_r.service_type, sd_r.mistnet_code);
patrick_duc 20:b0281e8a375a 381
lo 29:d085ab35d584 382 sd.component_id = Component::BME280;
patrick_duc 36:14a8da4108d5 383 sd.service_type = Service::SERVICE_TYPE::SENSOR;
lo 29:d085ab35d584 384 sd.mistnet_code = 0x4b;
lo 29:d085ab35d584 385 strcpy(sd.comment,"BME_HUMI");
lo 29:d085ab35d584 386 ep.write((uint32_t) (pos), (void *) &sd, sizeof(sd));
lo 29:d085ab35d584 387 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 388 ep.read((uint32_t) (pos), (void *) &sd_r, sizeof(sd_r));
lo 29:d085ab35d584 389 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 390 pos += sizeof(sd);
lo 29:d085ab35d584 391 printf("service4 ID:0x%02x type:0x%02x code:0x%04x\n",
patrick_duc 36:14a8da4108d5 392 sd_r.component_id, sd_r.service_type, sd_r.mistnet_code);
lo 29:d085ab35d584 393
lo 29:d085ab35d584 394 sd.component_id = Component::BME280;
patrick_duc 36:14a8da4108d5 395 sd.service_type = Service::SERVICE_TYPE::SENSOR;
lo 29:d085ab35d584 396 sd.mistnet_code = 0x4c;
patrick_duc 13:5414193da1de 397
lo 29:d085ab35d584 398 strcpy(sd.comment,"BME_BARO");
lo 29:d085ab35d584 399 ep.write((uint32_t) (pos), (void *) &sd, sizeof(sd));
lo 29:d085ab35d584 400 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 401 ep.read((uint32_t) (pos), (void *) &sd_r, sizeof(sd_r));
lo 29:d085ab35d584 402 if (ep.getError() != 0) error(ep.getErrorMessage());
lo 29:d085ab35d584 403 pos += sizeof(sd);
lo 29:d085ab35d584 404 printf("service5 ID:0x%02x type:0x%02x code:0x%04x\n",
patrick_duc 36:14a8da4108d5 405 sd_r.component_id, sd_r.service_type, sd_r.mistnet_code);
lo 29:d085ab35d584 406 }