The friendly Operating System for the Internet of Things

Generic data structure for expressing physical values. More...
Physical data is expressed in a 3dimensional touple of values. In addition to the data fields, this struct contains further the (physical) unit and the scale factor of the data. The unit is expressed as constant. The scale factor is expressed as power of 10 (10^factor).
The combination of signed 16bit numbers with and the scale factor gives us a very high dynamic range (from 32*10^131 to 32*10^130). In a wider sense we are saving the values as fixed floating points...
The scale factor is identical for all 3 values.
In a traditional (scientific) computational system the obvious choice for the used data type would be to use floats. We are however on heavily resource constrained (even 8bit) embedded systems, so we use int16_t here. As most sensor are in some way ADC based, they normally do not use a higher accuracy than 1214bit, so using 16bit integers to represent this data is good enough in most cases.
#include <phydat.h>
Data Fields  
int16_t  val [PHYDAT_DIM] 
the 3 generic dimensions of data  
uint8_t  unit 
the (physical) unit of the data  
int8_t  scale 
the scale factor, 10^*scale*  