You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by vi...@apache.org on 2017/02/24 19:38:34 UTC

[39/50] incubator-mynewt-core git commit: Add power mode command to the bno055 shell

Add power mode command to the bno055 shell


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/43179745
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/43179745
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/43179745

Branch: refs/heads/develop
Commit: 43179745c890e6a195440d5050ec21e32f5ed023
Parents: ea2ff6d
Author: Vipul Rahane <vi...@apache.org>
Authored: Wed Feb 15 16:29:39 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Wed Feb 15 16:29:39 2017 -0800

----------------------------------------------------------------------
 .../sensors/bno055/include/bno055/bno055.h      | 29 +++++++++-
 hw/drivers/sensors/bno055/src/bno055.c          | 58 ++++++++++++++++----
 hw/drivers/sensors/bno055/src/bno055_shell.c    | 50 ++++++++++++++---
 3 files changed, 114 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/43179745/hw/drivers/sensors/bno055/include/bno055/bno055.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/include/bno055/bno055.h b/hw/drivers/sensors/bno055/include/bno055/bno055.h
index 1e30ba2..09fa3ec 100644
--- a/hw/drivers/sensors/bno055/include/bno055/bno055.h
+++ b/hw/drivers/sensors/bno055/include/bno055/bno055.h
@@ -99,13 +99,13 @@ int
 bno055_write8(uint8_t reg, uint8_t value);
 
 /**
- * Setting mode for the bno055 sensor
+ * Set operation mode for the bno055 sensor
  *
  * @param Operation mode for the sensor
  * @return 0 on success, non-zero on failure
  */
 int
-bno055_set_mode(uint8_t mode);
+bno055_set_opr_mode(uint8_t mode);
 
 #if MYNEWT_VAL(BNO055_CLI)
 int bno055_shell_init(void);
@@ -140,8 +140,31 @@ bno055_get_chip_id(uint8_t *id);
  * @return mode
  */
 uint8_t
-bno055_get_mode(void);
+bno055_get_opr_mode(void);
 
+/**
+ * Read current power mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_pwr_mode(void);
+
+/**
+ * Set power mode for the sensor
+ *
+ * @return mode
+ */
+int
+bno055_set_pwr_mode(uint8_t mode);
+
+/**
+ * Get power mode for the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_pwr_mode(void);
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/43179745/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 8b31ac6..bcc880d 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -102,7 +102,8 @@ static const struct sensor_driver g_bno055_sensor_driver = {
     bno055_sensor_get_config
 };
 
-static uint8_t g_bno055_mode;
+static uint8_t g_bno055_opr_mode;
+static uint8_t g_bno055_pwr_mode;
 
 /**
  * Writes a single byte to the specified register
@@ -251,13 +252,13 @@ err:
 
 
 /**
- * Setting mode for the bno055 sensor
+ * Setting operation mode for the bno055 sensor
  *
  * @param Operation mode for the sensor
  * @return 0 on success, non-zero on failure
  */
 int
-bno055_set_mode(uint8_t mode)
+bno055_set_opr_mode(uint8_t mode)
 {
     int rc;
 
@@ -273,21 +274,54 @@ bno055_set_mode(uint8_t mode)
         os_time_delay(OS_TICKS_PER_SEC/1000 * 7);
     }
 
-    g_bno055_mode = mode;
+    g_bno055_opr_mode = mode;
     return 0;
 err:
     return rc;
 }
 
 /**
+ * Setting power mode for the bno055 sensor
+ *
+ * @param power mode for the sensor
+ * @return 0 on success, non-zero on failure
+ */
+int
+bno055_set_pwr_mode(uint8_t mode)
+{
+    int rc;
+
+    rc = bno055_write8(BNO055_PWR_MODE_ADDR, mode);
+    if (rc) {
+        goto err;
+    }
+
+    g_bno055_pwr_mode = mode;
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Read current power mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_pwr_mode(void)
+{
+    return g_bno055_pwr_mode;
+}
+
+/**
  * Read current operational mode of the sensor
  *
  * @return mode
  */
 uint8_t
-bno055_get_mode(void)
+bno055_get_opr_mode(void)
 {
-    return g_bno055_mode;
+    return g_bno055_opr_mode;
 }
 
 /**
@@ -384,10 +418,10 @@ bno055_set_ext_xtal_use(uint8_t use_xtal)
     int rc;
     uint8_t prev_mode;
 
-    prev_mode = g_bno055_mode;
+    prev_mode = g_bno055_opr_mode;
 
     /* Switch to config mode */
-    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
+    rc = bno055_set_opr_mode(BNO055_OPERATION_MODE_CONFIG);
     if (rc) {
         goto err;
     }
@@ -416,7 +450,7 @@ bno055_set_ext_xtal_use(uint8_t use_xtal)
     os_time_delay(OS_TICKS_PER_SEC/1000 * 10);
 
     /* Reset to previous operating mode */
-    rc = bno055_set_mode(prev_mode);
+    rc = bno055_set_opr_mode(prev_mode);
     if (rc) {
         goto err;
     }
@@ -436,7 +470,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     uint8_t id;
     uint8_t prev_mode;
 
-    prev_mode = g_bno055_mode;
+    prev_mode = g_bno055_opr_mode;
 
     /* Check if we can read the chip address */
     rc = bno055_get_chip_id(&id);
@@ -464,7 +498,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         goto err;
     }
 
-    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
+    rc = bno055_set_opr_mode(BNO055_OPERATION_MODE_CONFIG);
     if (rc) {
         goto err;
     }
@@ -499,7 +533,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     memcpy(&bno055->cfg, cfg, sizeof(*cfg));
 
     /* Change back to previous mode */
-    rc = bno055_set_mode(prev_mode);
+    rc = bno055_set_opr_mode(prev_mode);
     if (rc) {
         goto err;
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/43179745/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index 919aa48..9de1ed5 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -222,7 +222,7 @@ err:
 }
 
 static int
-bno055_shell_cmd_mode(int argc, char **argv)
+bno055_shell_cmd_opr_mode(int argc, char **argv)
 {
     long val;
     int rc;
@@ -233,7 +233,7 @@ bno055_shell_cmd_mode(int argc, char **argv)
 
     /* Display the mode */
     if (argc == 2) {
-        val = bno055_get_mode();
+        val = bno055_get_opr_mode();
         console_printf("%u\n", (unsigned int)val);
     }
 
@@ -247,7 +247,44 @@ bno055_shell_cmd_mode(int argc, char **argv)
             return bno055_shell_err_invalid_arg(argv[2]);
         }
 
-        rc = bno055_set_mode(val);
+        rc = bno055_set_opr_mode(val);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+static int
+bno055_shell_cmd_pwr_mode(int argc, char **argv)
+{
+    long val;
+    int rc;
+
+    if (argc > 3) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the mode */
+    if (argc == 2) {
+        val = bno055_get_pwr_mode();
+        console_printf("%u\n", (unsigned int)val);
+    }
+
+    /* Update the mode */
+    if (argc == 3) {
+        if (bno055_shell_stol(argv[2], 0, 16, &val)) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+        /* Make sure mode is */
+        if (val > BNO055_POWER_MODE_SUSPEND) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+
+        rc = bno055_set_pwr_mode(val);
         if (rc) {
             goto err;
         }
@@ -349,7 +386,7 @@ bno055_shell_cmd(int argc, char **argv)
 
     /* Mode command */
     if (argc > 1 && strcmp(argv[1], "mode") == 0) {
-        return bno055_shell_cmd_mode(argc, argv);
+        return bno055_shell_cmd_opr_mode(argc, argv);
     }
 
     /* Chip ID command */
@@ -366,14 +403,11 @@ bno055_shell_cmd(int argc, char **argv)
         return bno055_shell_cmd_reset(argc, argv);
     }
 
-#if 0
     /* Power mode command */
     if (argc > 1 && strcmp(argv[1], "pmode") == 0) {
-        return bno055_shell_cmd_pmode(argc, argv);
+        return bno055_shell_cmd_pwr_mode(argc, argv);
     }
 
-#endif
-
     /* Dump Registers command */
     if (argc > 1 && strcmp(argv[1], "dumpreg") == 0) {
         return bno055_shell_cmd_dumpreg(argc, argv);