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:34 UTC
[12/50] [abbrv] incubator-mynewt-core git commit: MYNEWT-667
SensorAPI: Shell:
MYNEWT-667 SensorAPI: Shell:
- Invalid type in read crashes device and print type in user friendly manner
- Error handling was not taken care of Sensor type is bit field, printing it
out as individual bits is better than printing the entire bitmap
- Also allow printing accepting type in hex, use strtol() instead of atoi()
for parsing type
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/3f4a64d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/3f4a64d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/3f4a64d4
Branch: refs/heads/nrf_cputime
Commit: 3f4a64d442d513cb39bbd7ae265a5c9c4da38318
Parents: c9fbdfc
Author: Vipul Rahane <vi...@apache.org>
Authored: Mon Mar 13 14:44:45 2017 -0700
Committer: Vipul Rahane <vi...@apache.org>
Committed: Mon Mar 13 14:47:02 2017 -0700
----------------------------------------------------------------------
hw/drivers/sensors/tcs34725/src/tcs34725.c | 2 +-
hw/sensor/src/sensor_shell.c | 40 +++++++++++++++++++++----
2 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3f4a64d4/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 7a4c07f..d67ecd9 100644
--- a/hw/drivers/sensors/tcs34725/src/tcs34725.c
+++ b/hw/drivers/sensors/tcs34725/src/tcs34725.c
@@ -753,7 +753,7 @@ tcs34725_calc_colortemp_lux(struct sensor_color_data *scd, struct tcs34725 *tcs3
}
/* Shock absorber */
- os_time_delay((256 - (uint16_t)agc_list[agc_cur].ta_time) * 2.4 * 2 * OS_TICKS_PER_SEC);
+ os_time_delay((256 - ((uint16_t)agc_list[agc_cur].ta_time) * 2.4 * 2 * OS_TICKS_PER_SEC)/1000 + 1);
rc = tcs34725_get_rawdata(&scd->scd_r, &scd->scd_g, &scd->scd_b, &scd->scd_c, tcs34725);
if (rc) {
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3f4a64d4/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index fbddd96..8e65752 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -59,8 +59,19 @@ sensor_display_help(void)
static void
sensor_cmd_display_sensor(struct sensor *sensor)
{
- console_printf("sensor dev = %s, type = 0x%llx\n", sensor->s_dev->od_name,
- sensor->s_types);
+ int type;
+ int i;
+
+ console_printf("sensor dev = %s, type = ", sensor->s_dev->od_name);
+
+ for (i = 0; i < 32; i++) {
+ type = (0x1 << i) & sensor->s_types;
+ if (type) {
+ console_printf("0x%x ", type);
+ }
+ }
+
+ console_printf("\n");
}
static void
@@ -243,7 +254,7 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
return (0);
}
-static void
+static int
sensor_cmd_read(char *name, sensor_type_t type, int nsamples)
{
struct sensor *sensor;
@@ -261,6 +272,14 @@ sensor_cmd_read(char *name, sensor_type_t type, int nsamples)
*/
memset(&ctx, 0, sizeof(ctx));
+ if (!(type & sensor->s_types)) {
+ rc = SYS_EINVAL;
+ /* Directly return without trying to unregister */
+ console_printf("Read req for wrng type 0x%x from selected sensor: %s\n",
+ (int)type, name);
+ return rc;
+ }
+
ctx.type = type;
listener.sl_sensor_type = type;
@@ -269,11 +288,14 @@ sensor_cmd_read(char *name, sensor_type_t type, int nsamples)
rc = sensor_register_listener(sensor, &listener);
if (rc != 0) {
- goto err;
+ return rc;
}
while (1) {
rc = sensor_read(sensor, type, NULL, NULL, OS_TIMEOUT_NEVER);
+ if (rc) {
+ goto err;
+ }
if (ctx.num_entries >= nsamples) {
break;
}
@@ -281,8 +303,10 @@ sensor_cmd_read(char *name, sensor_type_t type, int nsamples)
sensor_unregister_listener(sensor, &listener);
+ return 0;
err:
- return;
+ sensor_unregister_listener(sensor, &listener);
+ return rc;
}
int
@@ -370,7 +394,11 @@ sensor_cmd_exec(int argc, char **argv)
rc = SYS_EINVAL;
goto err;
}
- sensor_cmd_read(argv[2], (sensor_type_t) atoi(argv[3]), atoi(argv[4]));
+
+ rc = sensor_cmd_read(argv[2], (sensor_type_t) strtol(argv[3], NULL, 0), atoi(argv[4]));
+ if (rc) {
+ goto err;
+ }
} else if (!strcmp(argv[1], "i2cscan")) {
rc = sensor_cmd_i2cscan(argc, argv);
if (rc) {