Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
FCH_31
Date:
Mon Oct 22 09:37:50 2018 +0000
Revision:
41:5a436163dddf
Parent:
36:14a8da4108d5
avec radio;

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