diff --git a/src/drv-iio-buffer-accel.c b/src/drv-iio-buffer-accel.c index 4259043..ecfa75a 100644 --- a/src/drv-iio-buffer-accel.c +++ b/src/drv-iio-buffer-accel.c @@ -36,6 +36,7 @@ process_scan (IIOSensorData data, DrvData *or_data) { int i; int accel_x, accel_y, accel_z; + gdouble scale; gboolean present_x, present_y, present_z; AccelReadings readings; @@ -53,9 +54,9 @@ process_scan (IIOSensorData data, DrvData *or_data) return 0; } - process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_accel_x", &accel_x, &present_x); - process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_accel_y", &accel_y, &present_y); - process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_accel_z", &accel_z, &present_z); + process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_accel_x", &accel_x, &scale, &present_x); + process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_accel_y", &accel_y, &scale, &present_y); + process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_accel_z", &accel_z, &scale, &present_z); g_debug ("Read from IIO: %d, %d, %d", accel_x, accel_y, accel_z); diff --git a/src/drv-iio-buffer-compass.c b/src/drv-iio-buffer-compass.c index 126771a..2858076 100644 --- a/src/drv-iio-buffer-compass.c +++ b/src/drv-iio-buffer-compass.c @@ -35,6 +35,7 @@ process_scan (IIOSensorData data, DrvData *or_data) { int i; int raw_heading; + gdouble scale; gboolean present_level; CompassReadings readings; @@ -52,7 +53,7 @@ process_scan (IIOSensorData data, DrvData *or_data) return 0; } - process_scan_1 (data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_rot_from_north_magnetic_tilt_comp_raw", &raw_heading, &present_level); + process_scan_1 (data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_rot_from_north_magnetic_tilt_comp_raw", &raw_heading, &scale, &present_level); g_debug ("Read from IIO: %d", raw_heading); readings.heading = raw_heading * or_data->scale; diff --git a/src/drv-iio-buffer-light.c b/src/drv-iio-buffer-light.c index 4d16c7d..913c0e2 100644 --- a/src/drv-iio-buffer-light.c +++ b/src/drv-iio-buffer-light.c @@ -33,6 +33,7 @@ process_scan (IIOSensorData data, DrvData *or_data) { int i; int level = 0; + gdouble scale; gboolean present_level; LightReadings readings; @@ -50,10 +51,12 @@ process_scan (IIOSensorData data, DrvData *or_data) return 0; } - process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_intensity_both", &level, &present_level); + process_scan_1(data.data + or_data->buffer_data->scan_size*i, or_data->buffer_data, "in_intensity_both", &level, &scale, &present_level); - g_debug ("Read from IIO: %d", level); + g_debug ("Read from IIO: %f", level * scale); readings.level = level; + if (scale) + readings.level *= scale; readings.uses_lux = TRUE; //FIXME report errors diff --git a/src/iio-buffer-utils.c b/src/iio-buffer-utils.c index 0b91302..f8f58a5 100644 --- a/src/iio-buffer-utils.c +++ b/src/iio-buffer-utils.c @@ -455,6 +455,7 @@ size_from_channelarray (iio_channel_info **channels, * @buffer_data: Buffer information * ch_name: name of channel to get * ch_val: value for the channel + * ch_scale: scale for the channel * ch_present: whether the channel is present **/ void @@ -462,6 +463,7 @@ process_scan_1 (char *data, BufferDrvData *buffer_data, char *ch_name, int *ch_val, + gdouble *ch_scale, gboolean *ch_present) { int k; @@ -484,6 +486,7 @@ process_scan_1 (char *data, if (buffer_data->channels[k]->bits_used < 32) val &= ((guint32) 1 << buffer_data->channels[k]->bits_used) - 1; val = (gint32) (val << (32 - buffer_data->channels[k]->bits_used)) >> (32 - buffer_data->channels[k]->bits_used); *ch_val = (int) val; + *ch_scale = buffer_data->channels[k]->scale; *ch_present = TRUE; } break; diff --git a/src/iio-buffer-utils.h b/src/iio-buffer-utils.h index 86b0a8b..cc09178 100644 --- a/src/iio-buffer-utils.h +++ b/src/iio-buffer-utils.h @@ -33,6 +33,7 @@ void process_scan_1 (char *data, BufferDrvData *buffer_data, char *ch_name, int *ch_val, + gdouble *ch_scale, gboolean *ch_present); void buffer_drv_data_free (BufferDrvData *buffer_data);