You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by we...@apache.org on 2017/03/24 23:15:36 UTC

[14/50] [abbrv] incubator-mynewt-core git commit: MYNEWT-669 SensorAPI: Change UNUSED_DATA indicator

MYNEWT-669 SensorAPI: Change UNUSED_DATA indicator

- Please see description of the ticket for details
  Adding bitfields to indicate validity of data


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/20ffb7e4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/20ffb7e4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/20ffb7e4

Branch: refs/heads/nrf_cputime
Commit: 20ffb7e4e23f9d3d78dde0dff27f326354f71a28
Parents: 699ca15
Author: Vipul Rahane <vi...@apache.org>
Authored: Tue Mar 14 12:24:04 2017 -0700
Committer: Vipul Rahane <vi...@apache.org>
Committed: Tue Mar 14 12:24:04 2017 -0700

----------------------------------------------------------------------
 hw/drivers/sensors/bno055/src/bno055.c         | 22 ++++++++++++++
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c |  8 ++++++
 hw/drivers/sensors/sim/src/generic_accel.c     |  8 ++++--
 hw/drivers/sensors/sim/src/generic_mag.c       |  8 ++++--
 hw/drivers/sensors/tcs34725/src/tcs34725.c     | 14 ++++-----
 hw/drivers/sensors/tsl2561/src/tsl2561.c       |  4 +++
 hw/sensor/include/sensor/accel.h               | 10 +++----
 hw/sensor/include/sensor/color.h               |  2 +-
 hw/sensor/include/sensor/euler.h               |  9 +++---
 hw/sensor/include/sensor/light.h               |  9 +++---
 hw/sensor/include/sensor/mag.h                 |  9 +++---
 hw/sensor/include/sensor/quat.h                | 10 +++----
 hw/sensor/src/sensor_shell.c                   | 32 ++++++++++-----------
 13 files changed, 91 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index 6f50563..2ee775e 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -849,6 +849,11 @@ bno055_get_quat_data(void *datastruct)
     sqd->sqd_y = ((((uint16_t)buffer[5]) << 8) | ((uint16_t)buffer[4])) * scale;
     sqd->sqd_z = ((((uint16_t)buffer[7]) << 8) | ((uint16_t)buffer[6])) * scale;
 
+    sqd->sqd_w_is_valid = 1;
+    sqd->sqd_x_is_valid = 1;
+    sqd->sqd_y_is_valid = 1;
+    sqd->sqd_z_is_valid = 1;
+
     return 0;
 err:
     return rc;
@@ -954,6 +959,11 @@ bno055_get_vector_data(void *datastruct, int type)
             smd->smd_x = ((double)x)/16.0;
             smd->smd_y = ((double)y)/16.0;
             smd->smd_z = ((double)z)/16.0;
+
+            smd->smd_x_is_valid = 1;
+            smd->smd_y_is_valid = 1;
+            smd->smd_z_is_valid = 1;
+
             break;
         case SENSOR_TYPE_GYROSCOPE:
             sad = datastruct;
@@ -961,6 +971,10 @@ bno055_get_vector_data(void *datastruct, int type)
             sad->sad_x = ((double)x)/gyro_div;
             sad->sad_y = ((double)y)/gyro_div;
             sad->sad_z = ((double)z)/gyro_div;
+
+            sad->sad_x_is_valid = 1;
+            sad->sad_y_is_valid = 1;
+            sad->sad_z_is_valid = 1;
             break;
         case SENSOR_TYPE_EULER:
             sad = datastruct;
@@ -968,6 +982,10 @@ bno055_get_vector_data(void *datastruct, int type)
             sed->sed_h = ((double)x)/euler_div;
             sed->sed_r = ((double)y)/euler_div;
             sed->sed_p = ((double)z)/euler_div;
+
+            sed->sed_h_is_valid = 1;
+            sed->sed_r_is_valid = 1;
+            sed->sed_p_is_valid = 1;
             break;
         case SENSOR_TYPE_ACCELEROMETER:
         case SENSOR_TYPE_LINEAR_ACCEL:
@@ -977,6 +995,10 @@ bno055_get_vector_data(void *datastruct, int type)
             sad->sad_x = ((double)x)/acc_div;
             sad->sad_y = ((double)y)/acc_div;
             sad->sad_z = ((double)z)/acc_div;
+
+            sad->sad_x_is_valid = 1;
+            sad->sad_y_is_valid = 1;
+            sad->sad_z_is_valid = 1;
             break;
         default:
             BNO055_ERR("Not supported sensor type: %d\n", type);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
index 1d5af6c..6151f5d 100644
--- a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
@@ -425,6 +425,10 @@ lsm303dlhc_sensor_read(struct sensor *sensor, sensor_type_t type,
         sad.sad_y = (float)y * mg_lsb * 9.80665F;
         sad.sad_z = (float)z * mg_lsb * 9.80665F;
 
+        sad.sad_x_is_valid = 1;
+        sad.sad_y_is_valid = 1;
+        sad.sad_z_is_valid = 1;
+
         /* Call data function */
         rc = data_func(sensor, data_arg, &sad);
         if (rc != 0) {
@@ -511,6 +515,10 @@ lsm303dlhc_sensor_read(struct sensor *sensor, sensor_type_t type,
         smd.smd_y = (float)y / gauss_lsb_xy * 100.0F;
         smd.smd_z = (float)z / gauss_lsb_z * 100.0F;
 
+        smd.smd_x_is_valid = 1;
+        smd.smd_y_is_valid = 1;
+        smd.smd_z_is_valid = 1;
+
         /* Call data function */
         rc = data_func(sensor, data_arg, &smd);
         if (rc != 0) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/drivers/sensors/sim/src/generic_accel.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/sim/src/generic_accel.c b/hw/drivers/sensors/sim/src/generic_accel.c
index df7316a..4481c19 100644
--- a/hw/drivers/sensors/sim/src/generic_accel.c
+++ b/hw/drivers/sensors/sim/src/generic_accel.c
@@ -135,8 +135,12 @@ sim_accel_sensor_read(struct sensor *sensor, sensor_type_t type,
      * returned.
      */
     sad.sad_x = 0.0;
-    sad.sad_y = SENSOR_ACCEL_DATA_UNUSED;
-    sad.sad_z = SENSOR_ACCEL_DATA_UNUSED;
+    sad.sad_y = 0.0;
+    sad.sad_z = 0.0;
+
+    sad.sad_x_is_valid = 1;
+    sad.sad_y_is_valid = 0;
+    sad.sad_z_is_valid = 0;
 
     if (sa->sa_cfg.sac_nr_axises > 1) {
         sad.sad_y = 0.0;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/drivers/sensors/sim/src/generic_mag.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/sim/src/generic_mag.c b/hw/drivers/sensors/sim/src/generic_mag.c
index f4eb385..49e9337 100644
--- a/hw/drivers/sensors/sim/src/generic_mag.c
+++ b/hw/drivers/sensors/sim/src/generic_mag.c
@@ -135,8 +135,12 @@ sim_mag_sensor_read(struct sensor *sensor, sensor_type_t type,
      * returned.
      */
     smd.smd_x = 0.0;
-    smd.smd_y = SENSOR_MAG_DATA_UNUSED;
-    smd.smd_z = SENSOR_MAG_DATA_UNUSED;
+    smd.smd_y = 0.0;
+    smd.smd_z = 0.0;
+
+    smd.smd_x_is_valid = 1;
+    smd.smd_y_is_valid = 0;
+    smd.smd_z_is_valid = 0;
 
     if (sm->sm_cfg.smc_nr_axises > 1) {
         smd.smd_y = 0.0;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/drivers/sensors/tcs34725/src/tcs34725.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tcs34725/src/tcs34725.c b/hw/drivers/sensors/tcs34725/src/tcs34725.c
index d67ecd9..e20ecde 100644
--- a/hw/drivers/sensors/tcs34725/src/tcs34725.c
+++ b/hw/drivers/sensors/tcs34725/src/tcs34725.c
@@ -705,10 +705,6 @@ tcs34725_calc_colortemp_lux(struct sensor_color_data *scd, struct tcs34725 *tcs3
 
     scd->scd_lux = (-0.32466F * scd->scd_r) + (1.57837F * scd->scd_g) + (-0.73191F * scd->scd_b);
 
-    scd->scd_r_is_valid = 1;
-    scd->scd_g_is_valid = 1;
-    scd->scd_b_is_valid = 1;
-    scd->scd_c_is_valid = 1;
     scd->scd_colortemp_is_valid = 1;
     scd->scd_lux_is_valid = 1;
 
@@ -809,10 +805,6 @@ tcs34725_calc_colortemp_lux(struct sensor_color_data *scd, struct tcs34725 *tcs3
 
     scd->scd_colortemp = TCS34725_CT_COEF * (float)b_comp / (float)r_comp + TCS34725_CT_OFFSET;
 
-    scd->scd_r_is_valid = 1;
-    scd->scd_g_is_valid = 1;
-    scd->scd_b_is_valid = 1;
-    scd->scd_c_is_valid = 1;
     scd->scd_lux_is_valid = 1;
     scd->scd_colortemp_is_valid = 1;
     scd->scd_saturation_is_valid = 1;
@@ -860,6 +852,12 @@ tcs34725_sensor_read(struct sensor *sensor, sensor_type_t type,
         scd.scd_g = g;
         scd.scd_b = b;
         scd.scd_c = c;
+
+        scd.scd_r_is_valid = 1;
+        scd.scd_g_is_valid = 1;
+        scd.scd_b_is_valid = 1;
+        scd.scd_c_is_valid = 1;
+
         rc = tcs34725_calc_colortemp_lux(&scd, tcs34725);
         if (rc) {
             goto err;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/drivers/sensors/tsl2561/src/tsl2561.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561.c b/hw/drivers/sensors/tsl2561/src/tsl2561.c
index 8ea8ad3..27cd96e 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561.c
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561.c
@@ -672,6 +672,10 @@ tsl2561_sensor_read(struct sensor *sensor, sensor_type_t type,
         sld.sld_ir = ir;
         sld.sld_lux = lux;
 
+        sld.sld_full_is_valid = 1;
+        sld.sld_ir_is_valid   = 1;
+        sld.sld_lux_is_valid  = 1;
+
         /* Call data function */
         rc = data_func(sensor, data_arg, &sld);
         if (rc != 0) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/sensor/include/sensor/accel.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/accel.h b/hw/sensor/include/sensor/accel.h
index 17e3561..564888b 100644
--- a/hw/sensor/include/sensor/accel.h
+++ b/hw/sensor/include/sensor/accel.h
@@ -35,12 +35,12 @@ struct sensor_accel_data {
     float sad_x;
     float sad_y;
     float sad_z;
-} __attribute__((packed));
 
-/**
- * Accelerometer data is unused for this field.
- */
-#define SENSOR_ACCEL_DATA_UNUSED (-1)
+    /* Validity */
+    uint8_t sad_x_is_valid:1;
+    uint8_t sad_y_is_valid:1;
+    uint8_t sad_z_is_valid:1;
+} __attribute__((packed));
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/sensor/include/sensor/color.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/color.h b/hw/sensor/include/sensor/color.h
index 46f3436..2cc40ca 100644
--- a/hw/sensor/include/sensor/color.h
+++ b/hw/sensor/include/sensor/color.h
@@ -43,7 +43,7 @@ struct sensor_color_data {
      */
     uint16_t scd_saturation;   /* Saturation        */
     uint16_t scd_saturation75; /* Saturation75      */
-    uint8_t scd_is_sat;        /* Sensor saturrated */
+    uint8_t scd_is_sat;        /* Sensor saturated  */
     float scd_cratio;          /* C Ratio           */
     uint16_t scd_maxlux;       /* Max Lux value     */
     uint16_t scd_ir;           /* Infrared value    */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/sensor/include/sensor/euler.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/euler.h b/hw/sensor/include/sensor/euler.h
index 0b23ad1..0c95c56 100644
--- a/hw/sensor/include/sensor/euler.h
+++ b/hw/sensor/include/sensor/euler.h
@@ -36,13 +36,12 @@ struct sensor_euler_data {
     float sed_h;
     float sed_r;
     float sed_p;
+    /* Validity */
+    uint8_t sed_h_is_valid:1;
+    uint8_t sed_r_is_valid:1;
+    uint8_t sed_p_is_valid:1;
 } __attribute__((packed));
 
-/**
- * Euler angles data is unused for this field.
- */
-#define SENSOR_EULER_DATA_UNUSED (-1)
-
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/sensor/include/sensor/light.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/light.h b/hw/sensor/include/sensor/light.h
index 677f5c4..c9cdf91 100644
--- a/hw/sensor/include/sensor/light.h
+++ b/hw/sensor/include/sensor/light.h
@@ -35,13 +35,12 @@ struct sensor_light_data {
     uint16_t sld_full;
     uint16_t sld_ir;
     uint32_t sld_lux;
+    /* Validity */
+    uint8_t sld_full_is_valid:1;
+    uint8_t sld_ir_is_valid:1;
+    uint8_t sld_lux_is_valid:1;
 } __attribute__((packed));
 
-/**
- * Luminosity Sensor data is unused for this field.
- */
-#define SENSOR_LIGHT_DATA_UNUSED (-1)
-
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/sensor/include/sensor/mag.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/mag.h b/hw/sensor/include/sensor/mag.h
index 8387568..d43a28e 100644
--- a/hw/sensor/include/sensor/mag.h
+++ b/hw/sensor/include/sensor/mag.h
@@ -35,13 +35,12 @@ struct sensor_mag_data {
     float smd_x;
     float smd_y;
     float smd_z;
+    /* Validity */
+    uint8_t smd_x_is_valid:1;
+    uint8_t smd_y_is_valid:1;
+    uint8_t smd_z_is_valid:1;
 } __attribute__((packed));
 
-/**
- * Magnetometer data is unused for this field.
- */
-#define SENSOR_MAG_DATA_UNUSED (-1)
-
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/sensor/include/sensor/quat.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/quat.h b/hw/sensor/include/sensor/quat.h
index 3abb132..77f96b7 100644
--- a/hw/sensor/include/sensor/quat.h
+++ b/hw/sensor/include/sensor/quat.h
@@ -36,13 +36,13 @@ struct sensor_quat_data {
     float sqd_y;
     float sqd_z;
     float sqd_w;
+    /* Validity */
+    uint8_t sqd_x_is_valid:1;
+    uint8_t sqd_y_is_valid:1;
+    uint8_t sqd_z_is_valid:1;
+    uint8_t sqd_w_is_valid:1;
 } __attribute__((packed));
 
-/**
- * Quaternion data is unused for this field.
- */
-#define SENSOR_QUAT_DATA_UNUSED (-1)
-
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/20ffb7e4/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index 5fe0109..8fe2b21 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -132,13 +132,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
         ctx->type == SENSOR_TYPE_GRAVITY) {
 
         sad = (struct sensor_accel_data *) data;
-        if (sad->sad_x != SENSOR_ACCEL_DATA_UNUSED) {
+        if (sad->sad_x_is_valid) {
             console_printf("x = %s ", sensor_ftostr(sad->sad_x, tmpstr, 13));
         }
-        if (sad->sad_y != SENSOR_ACCEL_DATA_UNUSED) {
+        if (sad->sad_y_is_valid) {
             console_printf("y = %s ", sensor_ftostr(sad->sad_y, tmpstr, 13));
         }
-        if (sad->sad_z != SENSOR_ACCEL_DATA_UNUSED) {
+        if (sad->sad_z_is_valid) {
             console_printf("z = %s", sensor_ftostr(sad->sad_z, tmpstr, 13));
         }
         console_printf("\n");
@@ -146,13 +146,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
 
     if (ctx->type == SENSOR_TYPE_MAGNETIC_FIELD) {
         smd = (struct sensor_mag_data *) data;
-        if (smd->smd_x != SENSOR_MAG_DATA_UNUSED) {
+        if (smd->smd_x_is_valid) {
             console_printf("x = %s ", sensor_ftostr(smd->smd_x, tmpstr, 13));
         }
-        if (smd->smd_y != SENSOR_MAG_DATA_UNUSED) {
+        if (smd->smd_y_is_valid) {
             console_printf("y = %s ", sensor_ftostr(smd->smd_y, tmpstr, 13));
         }
-        if (smd->smd_z != SENSOR_MAG_DATA_UNUSED) {
+        if (smd->smd_z_is_valid) {
             console_printf("z = %s ", sensor_ftostr(smd->smd_z, tmpstr, 13));
         }
         console_printf("\n");
@@ -160,13 +160,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
 
     if (ctx->type == SENSOR_TYPE_LIGHT) {
         sld = (struct sensor_light_data *) data;
-        if (sld->sld_full != SENSOR_LIGHT_DATA_UNUSED) {
+        if (sld->sld_full_is_valid) {
             console_printf("Full = %u, ", sld->sld_full);
         }
-        if (sld->sld_ir != SENSOR_LIGHT_DATA_UNUSED) {
+        if (sld->sld_ir_is_valid) {
             console_printf("IR = %u, ", sld->sld_ir);
         }
-        if (sld->sld_lux != SENSOR_LIGHT_DATA_UNUSED) {
+        if (sld->sld_lux_is_valid) {
             console_printf("Lux = %u, ", (unsigned int)sld->sld_lux);
         }
         console_printf("\n");
@@ -180,13 +180,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
 
     if (ctx->type == SENSOR_TYPE_EULER) {
         sed = (struct sensor_euler_data *) data;
-        if (sed->sed_h != SENSOR_EULER_DATA_UNUSED) {
+        if (sed->sed_h_is_valid) {
             console_printf("h = %s", sensor_ftostr(sed->sed_h, tmpstr, 13));
         }
-        if (sed->sed_r != SENSOR_EULER_DATA_UNUSED) {
+        if (sed->sed_r_is_valid) {
             console_printf("r = %s", sensor_ftostr(sed->sed_r, tmpstr, 13));
         }
-        if (sed->sed_p != SENSOR_EULER_DATA_UNUSED) {
+        if (sed->sed_p_is_valid) {
             console_printf("p = %s", sensor_ftostr(sed->sed_p, tmpstr, 13));
         }
         console_printf("\n");
@@ -194,16 +194,16 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
 
     if (ctx->type == SENSOR_TYPE_ROTATION_VECTOR) {
         sqd = (struct sensor_quat_data *) data;
-        if (sqd->sqd_x != SENSOR_QUAT_DATA_UNUSED) {
+        if (sqd->sqd_x_is_valid) {
             console_printf("x = %s ", sensor_ftostr(sqd->sqd_x, tmpstr, 13));
         }
-        if (sqd->sqd_y != SENSOR_QUAT_DATA_UNUSED) {
+        if (sqd->sqd_y_is_valid) {
             console_printf("y = %s ", sensor_ftostr(sqd->sqd_y, tmpstr, 13));
         }
-        if (sqd->sqd_z != SENSOR_QUAT_DATA_UNUSED) {
+        if (sqd->sqd_z_is_valid) {
             console_printf("z = %s ", sensor_ftostr(sqd->sqd_z, tmpstr, 13));
         }
-        if (sqd->sqd_w != SENSOR_QUAT_DATA_UNUSED) {
+        if (sqd->sqd_w_is_valid) {
             console_printf("w = %s ", sensor_ftostr(sqd->sqd_w, tmpstr, 13));
         }
         console_printf("\n");