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) {