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 <vipulrah...@apache.org> Authored: Tue Mar 14 12:24:04 2017 -0700 Committer: Vipul Rahane <vipulrah...@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");