r-map / rmap

rete monitoraggio ambientale partecipativo documentation at https://doc.rmap.cc
https://rmap.cc
53 stars 42 forks source link

firmware: master I2C command to other modules by SensorDriver are not atomic #417

Closed pat1 closed 2 years ago

pat1 commented 2 years ago

Il problema è relativo alla non atomicità della sequenza prepare/get di Sensordriver nella comunicazione master/i2c-rain master/i2c-th. I comandi prepare sono inviati con CRC e conseguentemente con una possibilità di ripetizione del comando. Questo provoca che due ripetuti "ONESHOT START-STOP" o "CONTINUOUS START-STOP" comportano il primo il reset del valore corrente elaborato della misura, il secondo la messa a disposizione per la successiva get del valore resettato (mancante in i2c-th, azzerato per i2c-rain) e quindi una restituzione di un dato o mancante o erroneamente calcolato.

Bisogna rendere la sequenza prepare and get atomica definendo degli stati della transazione.