summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBogdan Davidoaia <bogdan.m.davidoaia@intel.com>2016-12-09 12:57:20 +0200
committerAnas Nashif <nashif@linux.intel.com>2016-12-13 21:51:11 +0000
commitde4727ba3fa59ffc9bba15c9cdd99ff048dd11c2 (patch)
tree009a0054a0b4e55dcc456be7e684e78ee94d940c
parent708fe8c1e3adc22b80f9f671dcc741ea0997f358 (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.c9
-rw-r--r--drivers/grove/temperature_sensor.c10
-rw-r--r--drivers/sensor/lsm6ds0/lsm6ds0.c17
-rw-r--r--drivers/sensor/lsm9ds0_gyro/lsm9ds0_gyro.c8
-rw-r--r--drivers/sensor/lsm9ds0_mfd/lsm9ds0_mfd.c16
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,