Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
patrick_duc
Date:
Tue Oct 16 07:29:51 2018 +0000
Revision:
36:14a8da4108d5
Parent:
33:6ae45cba7958
Child:
38:9b43b2415093
Child:
41:5a436163dddf
Merge des modifs faites avec Hoel.

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