diff options
author | Bogdan Davidoaia <bogdan.m.davidoaia@intel.com> | 2016-12-09 12:57:20 +0200 |
---|---|---|
committer | Anas Nashif <nashif@linux.intel.com> | 2016-12-13 21:51:11 +0000 |
commit | de4727ba3fa59ffc9bba15c9cdd99ff048dd11c2 (patch) | |
tree | 009a0054a0b4e55dcc456be7e684e78ee94d940c | |
parent | 708fe8c1e3adc22b80f9f671dcc741ea0997f358 (diff) |
sensor: update drivers to not return double values
Update drivers to return INT_PLUS_MICRO values instead of doubles.
This hides the fact that the drivers use floating point operations and
doesn't force the application to use them as well.
Change-Id: I14c6faecb35331c2fdbdab41bc624d751de984b8
Signed-off-by: Bogdan Davidoaia <bogdan.m.davidoaia@intel.com>
-rw-r--r-- | drivers/grove/light_sensor.c | 9 | ||||
-rw-r--r-- | drivers/grove/temperature_sensor.c | 10 | ||||
-rw-r--r-- | drivers/sensor/lsm6ds0/lsm6ds0.c | 17 | ||||
-rw-r--r-- | drivers/sensor/lsm9ds0_gyro/lsm9ds0_gyro.c | 8 | ||||
-rw-r--r-- | drivers/sensor/lsm9ds0_mfd/lsm9ds0_mfd.c | 16 |
5 files changed, 43 insertions, 17 deletions
diff --git a/drivers/grove/light_sensor.c b/drivers/grove/light_sensor.c index 95bc64945..377f6f7a7 100644 --- a/drivers/grove/light_sensor.c +++ b/drivers/grove/light_sensor.c @@ -44,7 +44,7 @@ static int gls_channel_get(struct device *dev, { struct gls_data *drv_data = dev->driver_data; uint16_t analog_val; - double ldr_val; + double ldr_val, dval; /* rescale sample from 12bit (Zephyr) to 10bit (Grove) */ analog_val = ((uint16_t)drv_data->adc_buffer[1] << 8) | @@ -57,8 +57,11 @@ static int gls_channel_get(struct device *dev, * https://github.com/intel-iot-devkit/upm/blob/master/src/grove/grove.cxx#L161 */ ldr_val = (1023.0 - analog_val) * 10.0 / analog_val; - val->type = SENSOR_VALUE_TYPE_DOUBLE; - val->dval = 10000.0 / pow(ldr_val * 15.0, 4.0/3.0); + dval = 10000.0 / pow(ldr_val * 15.0, 4.0/3.0); + + val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; + val->val1 = (int32_t)dval; + val->val2 = ((int32_t)(dval * 1000000)) % 1000000; return 0; } diff --git a/drivers/grove/temperature_sensor.c b/drivers/grove/temperature_sensor.c index 4b7b481e6..8c73f12a6 100644 --- a/drivers/grove/temperature_sensor.c +++ b/drivers/grove/temperature_sensor.c @@ -51,6 +51,7 @@ static int gts_channel_get(struct device *dev, { struct gts_data *drv_data = dev->driver_data; uint16_t analog_val; + double dval; /* rescale sample from 12bit (Zephyr) to 10bit (Grove) */ analog_val = ((uint16_t)drv_data->adc_buffer[1] << 8) | @@ -62,9 +63,12 @@ static int gts_channel_get(struct device *dev, * is taken from the sensor reference page: * http://www.seeedstudio.com/wiki/Grove_-_Temperature_Sensor */ - val->type = SENSOR_VALUE_TYPE_DOUBLE; - val->dval = 1 / (log(1023.0 / analog_val - 1.0) / B_CONST + - 1 / 298.15) - 273.15; + dval = 1 / (log(1023.0 / analog_val - 1.0) / B_CONST + + 1 / 298.15) - 273.15; + + val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; + val->val1 = (int32_t)dval; + val->val2 = ((int32_t)(dval * 1000000)) % 1000000; return 0; } diff --git a/drivers/sensor/lsm6ds0/lsm6ds0.c b/drivers/sensor/lsm6ds0/lsm6ds0.c index 5565ed859..772defed0 100644 --- a/drivers/sensor/lsm6ds0/lsm6ds0.c +++ b/drivers/sensor/lsm6ds0/lsm6ds0.c @@ -248,8 +248,12 @@ static int lsm6ds0_sample_fetch(struct device *dev, enum sensor_channel chan) static inline void lsm6ds0_accel_convert(struct sensor_value *val, int raw_val, float scale) { - val->type = SENSOR_VALUE_TYPE_DOUBLE; - val->dval = (double)(raw_val) * scale / 32767.0; + double dval; + + dval = (double)(raw_val) * scale / 32767.0; + val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; + val->val1 = (int32_t)dval; + val->val2 = ((int32_t)(dval * 1000000)) % 1000000; } static inline int lsm6ds0_accel_get_channel(enum sensor_channel chan, @@ -302,9 +306,12 @@ static int lsm6ds0_accel_channel_get(enum sensor_channel chan, static inline void lsm6ds0_gyro_convert(struct sensor_value *val, int raw_val, float numerator) { - val->type = SENSOR_VALUE_TYPE_DOUBLE; - val->dval = (double)(raw_val) * numerator / 1000.0 * - SENSOR_DEG2RAD_DOUBLE; + double dval; + + dval = (double)(raw_val) * numerator / 1000.0 * SENSOR_DEG2RAD_DOUBLE; + val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; + val->val1 = (int32_t)dval; + val->val2 = ((int32_t)(dval * 1000000)) % 1000000; } static inline int lsm6ds0_gyro_get_channel(enum sensor_channel chan, diff --git a/drivers/sensor/lsm9ds0_gyro/lsm9ds0_gyro.c b/drivers/sensor/lsm9ds0_gyro/lsm9ds0_gyro.c index b2615dcdd..c8c77ff47 100644 --- a/drivers/sensor/lsm9ds0_gyro/lsm9ds0_gyro.c +++ b/drivers/sensor/lsm9ds0_gyro/lsm9ds0_gyro.c @@ -162,8 +162,12 @@ static int lsm9ds0_gyro_sample_fetch(struct device *dev, static inline void lsm9ds0_gyro_convert(struct sensor_value *val, int raw_val, float numerator) { - val->type = SENSOR_VALUE_TYPE_DOUBLE; - val->dval = (double)(raw_val) * numerator / 1000.0 * DEG2RAD; + double dval; + + dval = (double)(raw_val) * numerator / 1000.0 * DEG2RAD; + val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; + val->val1 = (int32_t)dval; + val->val2 = ((int32_t)(dval * 1000000)) % 1000000; } static inline int lsm9ds0_gyro_get_channel(enum sensor_channel chan, diff --git a/drivers/sensor/lsm9ds0_mfd/lsm9ds0_mfd.c b/drivers/sensor/lsm9ds0_mfd/lsm9ds0_mfd.c index 22f1fdcb7..79fdb7ca0 100644 --- a/drivers/sensor/lsm9ds0_mfd/lsm9ds0_mfd.c +++ b/drivers/sensor/lsm9ds0_mfd/lsm9ds0_mfd.c @@ -398,8 +398,12 @@ static inline void lsm9ds0_mfd_convert_accel(struct sensor_value *val, int raw_val, float scale) { - val->type = SENSOR_VALUE_TYPE_DOUBLE; - val->dval = (double)(raw_val) * scale; + double dval; + + dval = (double)(raw_val) * scale; + val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; + val->val1 = (int32_t)dval; + val->val2 = ((int32_t)(dval * 1000000)) % 1000000; } static inline int lsm9ds0_mfd_get_accel_channel(enum sensor_channel chan, @@ -481,8 +485,12 @@ static inline void lsm9ds0_mfd_convert_magn(struct sensor_value *val, int raw_val, float scale) { - val->type = SENSOR_VALUE_TYPE_DOUBLE; - val->dval = (double)(raw_val) * scale; + double dval; + + dval = (double)(raw_val) * scale; + val->type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; + val->val1 = (int32_t)dval; + val->val2 = ((int32_t)(dval * 1000000)) % 1000000; } static inline int lsm9ds0_mfd_get_magn_channel(enum sensor_channel chan, |