You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by je...@apache.org on 2019/06/19 09:25:41 UTC

[mynewt-core] branch master updated (d63ea13 -> 8528cdf)

This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git.


    from d63ea13  Merge pull request #1885 from mkiiskila/m33_coredump
     new 2c4cebe  sensors/bmp280: Fix shell oversample command
     new defe36d  sensors/bmp280: Dump command redone
     new 68a726a  sensors/bmp280: Fix write with bus driver enabled
     new c84b1c7  sensors/bmp280: Add bus driver support to bmp280 cli
     new 8528cdf  sensor/creator: Add BMP280 bus driver support

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 hw/drivers/sensors/bmp280/include/bmp280/bmp280.h |   1 +
 hw/drivers/sensors/bmp280/src/bmp280.c            |  15 ++
 hw/drivers/sensors/bmp280/src/bmp280_shell.c      | 181 +++++++++++++++-------
 hw/drivers/sensors/bmp280/syscfg.yml              |   3 +
 hw/sensor/creator/src/sensor_creator.c            |  35 ++++-
 hw/sensor/creator/syscfg.yml                      |  31 ++++
 6 files changed, 208 insertions(+), 58 deletions(-)


[mynewt-core] 05/05: sensor/creator: Add BMP280 bus driver support

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 8528cdf59c0d02f803e965b596ea35481bbd6b6f
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Wed Jun 12 17:17:49 2019 +0200

    sensor/creator: Add BMP280 bus driver support
    
    Now sensor creator can creat BPM280 devices for SPI and I2C
    when bus driver is present.
---
 hw/sensor/creator/src/sensor_creator.c | 35 ++++++++++++++++++++++++++++++++--
 hw/sensor/creator/syscfg.yml           | 31 ++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/hw/sensor/creator/src/sensor_creator.c b/hw/sensor/creator/src/sensor_creator.c
index c63fe04..2e26856 100644
--- a/hw/sensor/creator/src/sensor_creator.c
+++ b/hw/sensor/creator/src/sensor_creator.c
@@ -225,13 +225,35 @@ static struct icp101xx icp10114;
  *#endif
  */
 
-#if MYNEWT_VAL(I2C_0) && MYNEWT_VAL(BMP280_OFB)
+#if MYNEWT_VAL(BMP280_OFB)
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+#if MYNEWT_VAL(BMP280_OFB_I2C_NUM) >= 0
+static const struct bus_i2c_node_cfg bmp280_node_cfg = {
+    .node_cfg = {
+        .bus_name = MYNEWT_VAL(BMP280_OFB_BUS),
+    },
+    .addr = MYNEWT_VAL(BMP280_OFB_I2C_ADDR),
+    .freq = 400,
+};
+#endif
+#if MYNEWT_VAL(BMP280_OFB_SPI_NUM) >= 0
+struct bus_spi_node_cfg bmp280_node_cfg = {
+    .node_cfg.bus_name = MYNEWT_VAL(BME280_OFB_SPI_BUS),
+    .pin_cs = MYNEWT_VAL(BMP280_OFB_CS),
+    .mode = BUS_SPI_MODE_0,
+    .data_order = HAL_SPI_MSB_FIRST,
+    .freq = MYNEWT_VAL(BMP280_OFB_BAUDRATE),
+};
+#endif
+static struct sensor_itf bmp280_itf;
+#elif MYNEWT_VAL(I2C_0)
 static struct sensor_itf i2c_0_itf_bmp = {
     .si_type = SENSOR_ITF_I2C,
     .si_num = 0,
     .si_addr = BMP280_DFLT_I2C_ADDR
 };
 #endif
+#endif
 
 #if MYNEWT_VAL(SPI_0_MASTER) && MYNEWT_VAL(BME280_OFB)
 #if MYNEWT_VAL(BUS_DRIVER_PRESENT)
@@ -1545,10 +1567,19 @@ sensor_dev_create(void)
 #endif
 
 #if MYNEWT_VAL(BMP280_OFB)
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+#if MYNEWT_VAL(BMP280_OFB_I2C_NUM) >= 0
+    rc = bmp280_create_i2c_sensor_dev(&bmp280.i2c_node, "bmp280_0",
+                                      &bmp280_node_cfg, &bmp280_itf);
+#elif MYNEWT_VAL(BMP280_OFB_SPI_NUM) >= 0
+    rc = bmp280_create_spi_sensor_dev(&bmp280.spi_node, "bmp280_0",
+                                      &bmp280_node_cfg, &bmp280_itf);
+#endif
+#else
     rc = os_dev_create((struct os_dev *) &bmp280, "bmp280_0",
       OS_DEV_INIT_PRIMARY, 0, bmp280_init, (void *)&i2c_0_itf_bmp);
     assert(rc == 0);
-
+#endif
     rc = config_bmp280_sensor();
     assert(rc == 0);
 #endif
diff --git a/hw/sensor/creator/syscfg.yml b/hw/sensor/creator/syscfg.yml
index 756504d..c8d0c7d 100644
--- a/hw/sensor/creator/syscfg.yml
+++ b/hw/sensor/creator/syscfg.yml
@@ -67,6 +67,37 @@ syscfg.defs:
     BMP280_OFB:
         description: 'BMP280 is present'
         value : 0
+    BMP280_OFB_BUS:
+        description: 'I2C or SPI interface used for BMP280'
+        value: '"i2c0"'
+    BMP280_OFB_I2C_NUM:
+        description: 'I2C interface used for BMP280'
+        value: -1
+        restrictions:
+         - '(BMP280_OFB == 0) ||
+            ((BMP280_OFB_I2C_NUM == 0) && (I2C_0 == 1)) ||
+            ((BMP280_OFB_I2C_NUM == 1) && (I2C_1 == 1)) ||
+            ((BMP280_OFB_I2C_NUM == 2) && (I2C_2 == 1)) ||
+            ((BMP280_OFB_I2C_NUM == -1))'
+    BMP280_OFB_SPI_NUM:
+        description: 'SPI interface used for ADXL345'
+        value: -1
+        restrictions:
+         - '(BMP280_OFB == 0) ||
+            ((BMP280_OFB_SPI_NUM == 0) && (SPI_0_MASTER == 1)) ||
+            ((BMP280_OFB_SPI_NUM == 1) && (SPI_1_MASTER == 1)) ||
+            ((BMP280_OFB_SPI_NUM == 2) && (SPI_2_MASTER == 1)) ||
+            ((BMP280_OFB_SPI_NUM == -1))'
+    BMP280_OFB_BAUDRATE:
+        description: 'BMP280 SPI speed'
+        value: 4000
+    BMP280_OFB_I2C_ADDR:
+        description: 'I2C address of BMP280 0x76 or 0x77'
+        value: 0x77
+        range: 0x76,0x77
+    BMP280_OFB_CS:
+        description: 'SPI CS pin for BMP280'
+        value:
     TCS34725_OFB:
         description: 'TCS34725 is present'
         value : 0


[mynewt-core] 02/05: sensors/bmp280: Dump command redone

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit defe36d48e7896285a8845274b7ee7ffdf14e8cf
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Wed Jun 12 12:09:16 2019 +0200

    sensors/bmp280: Dump command redone
    
    Each register read was done inside assert() macro which is
    not too good.
    Having assert for shell command seems a little bit too drastic.
---
 hw/drivers/sensors/bmp280/src/bmp280_shell.c | 88 ++++++++++++----------------
 1 file changed, 39 insertions(+), 49 deletions(-)

diff --git a/hw/drivers/sensors/bmp280/src/bmp280_shell.c b/hw/drivers/sensors/bmp280/src/bmp280_shell.c
index 50634f2..e48f8d4 100644
--- a/hw/drivers/sensors/bmp280/src/bmp280_shell.c
+++ b/hw/drivers/sensors/bmp280/src/bmp280_shell.c
@@ -303,63 +303,53 @@ err:
     return rc;
 }
 
+static void
+bmp280_shell_dump_reg(const char *name, uint8_t addr)
+{
+    uint8_t val = 0;
+    int rc;
+
+    rc = bmp280_readlen(&g_sensor_itf, addr, &val, 1);
+    if (rc == 0) {
+        console_printf("0x%02X (%s): 0x%02X\n", addr, name, val);
+    } else {
+        console_printf("0x%02X (%s): failed (%d)\n", addr, name, rc);
+    }
+}
+
+#define DUMP_REG(name) bmp280_shell_dump_reg(#name, BMP280_REG_ADDR_ ## name)
+
 static int
 bmp280_shell_cmd_dump(int argc, char **argv)
 {
-  uint8_t val;
-
   if (argc > 3) {
       return bmp280_shell_err_too_many_args(argv[1]);
   }
 
   /* Dump all the register values for debug purposes */
-  val = 0;
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_T1, &val, 1));
-  console_printf("0x%02X (DIG_T1): 0x%02X\n", BMP280_REG_ADDR_DIG_T1, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_T2, &val, 1));
-  console_printf("0x%02X (DIG_T2):  0x%02X\n", BMP280_REG_ADDR_DIG_T2, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_T3, &val, 1));
-  console_printf("0x%02X (DIG_T3):   0x%02X\n", BMP280_REG_ADDR_DIG_T3, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P1, &val, 1));
-  console_printf("0x%02X (DIG_P1): 0x%02X\n", BMP280_REG_ADDR_DIG_P1, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P2, &val, 1));
-  console_printf("0x%02X (DIG_P2):  0x%02X\n", BMP280_REG_ADDR_DIG_P2, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P3, &val, 1));
-  console_printf("0x%02X (DIG_P3):   0x%02X\n", BMP280_REG_ADDR_DIG_P3, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P4, &val, 1));
-  console_printf("0x%02X (DIG_P4): 0x%02X\n", BMP280_REG_ADDR_DIG_P4, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P5, &val, 1));
-  console_printf("0x%02X (DIG_P5):  0x%02X\n", BMP280_REG_ADDR_DIG_P5, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P6, &val, 1));
-  console_printf("0x%02X (DIG_P6):   0x%02X\n", BMP280_REG_ADDR_DIG_P6, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P7, &val, 1));
-  console_printf("0x%02X (DIG_P7): 0x%02X\n", BMP280_REG_ADDR_DIG_P7, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P8, &val, 1));
-  console_printf("0x%02X (DIG_P8):  0x%02X\n", BMP280_REG_ADDR_DIG_P8, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_DIG_P9, &val, 1));
-  console_printf("0x%02X (DIG_P9):   0x%02X\n", BMP280_REG_ADDR_DIG_P9, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_CHIPID, &val, 1));
-  console_printf("0x%02X (CHIPID):   0x%02X\n", BMP280_REG_ADDR_CHIPID, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_VERSION, &val, 1));
-  console_printf("0x%02X (VER):   0x%02X\n", BMP280_REG_ADDR_VERSION, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_STATUS, &val, 1));
-  console_printf("0x%02X (STATUS):   0x%02X\n", BMP280_REG_ADDR_STATUS, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_CTRL_MEAS, &val, 1));
-  console_printf("0x%02X (CTRL_MEAS):   0x%02X\n", BMP280_REG_ADDR_CTRL_MEAS, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_CONFIG, &val, 1));
-  console_printf("0x%02X (CONFIG):   0x%02X\n", BMP280_REG_ADDR_CONFIG, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_PRESS_MSB, &val, 1));
-  console_printf("0x%02X (PRESS MSB):   0x%02X\n", BMP280_REG_ADDR_PRESS_MSB, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_PRESS_LSB, &val, 1));
-  console_printf("0x%02X (PRESS LSB):   0x%02X\n", BMP280_REG_ADDR_PRESS_LSB, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_PRESS_XLSB, &val, 1));
-  console_printf("0x%02X (PRESS XLSB):   0x%02X\n", BMP280_REG_ADDR_PRESS_XLSB, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_TEMP_XLSB, &val, 1));
-  console_printf("0x%02X (TEMP MSB):   0x%02X\n", BMP280_REG_ADDR_TEMP_MSB, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_TEMP_LSB, &val, 1));
-  console_printf("0x%02X (TEMP LSB):   0x%02X\n", BMP280_REG_ADDR_TEMP_LSB, val);
-  assert(0 == bmp280_readlen(&g_sensor_itf, BMP280_REG_ADDR_TEMP_XLSB, &val, 1));
-  console_printf("0x%02X (TEMP XLSB):   0x%02X\n", BMP280_REG_ADDR_TEMP_XLSB, val);
+  DUMP_REG(DIG_T1);
+  DUMP_REG(DIG_T2);
+  DUMP_REG(DIG_T3);
+  DUMP_REG(DIG_P1);
+  DUMP_REG(DIG_P2);
+  DUMP_REG(DIG_P3);
+  DUMP_REG(DIG_P4);
+  DUMP_REG(DIG_P5);
+  DUMP_REG(DIG_P6);
+  DUMP_REG(DIG_P7);
+  DUMP_REG(DIG_P8);
+  DUMP_REG(DIG_P9);
+  DUMP_REG(CHIPID);
+  DUMP_REG(VERSION);
+  DUMP_REG(STATUS);
+  DUMP_REG(CTRL_MEAS);
+  DUMP_REG(CONFIG);
+  DUMP_REG(PRESS_MSB);
+  DUMP_REG(PRESS_LSB);
+  DUMP_REG(PRESS_XLSB);
+  DUMP_REG(TEMP_XLSB);
+  DUMP_REG(TEMP_LSB);
+  DUMP_REG(TEMP_XLSB);
 
   return 0;
 }


[mynewt-core] 03/05: sensors/bmp280: Fix write with bus driver enabled

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 68a726a86f5442500854bf0a6cbe9857f7fffe6c
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Wed Jun 12 16:18:50 2019 +0200

    sensors/bmp280: Fix write with bus driver enabled
    
    All register definitions have MSB set.
    For spi write this bit must be cleared.
    Bus driver version of write was not clearing it now it is.
---
 hw/drivers/sensors/bmp280/include/bmp280/bmp280.h |  1 +
 hw/drivers/sensors/bmp280/src/bmp280.c            | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h b/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h
index c486757..193c1d7 100644
--- a/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h
+++ b/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h
@@ -106,6 +106,7 @@ struct bmp280 {
         struct bus_i2c_node i2c_node;
         struct bus_spi_node spi_node;
     };
+    bool node_is_spi;
 #else
     struct os_dev dev;
 #endif
diff --git a/hw/drivers/sensors/bmp280/src/bmp280.c b/hw/drivers/sensors/bmp280/src/bmp280.c
index 1fe61c2..c383f91 100644
--- a/hw/drivers/sensors/bmp280/src/bmp280.c
+++ b/hw/drivers/sensors/bmp280/src/bmp280.c
@@ -87,6 +87,14 @@ static const struct sensor_driver g_bmp280_sensor_driver = {
     .sd_set_config = bmp280_sensor_set_config,
 };
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+static bool
+bmp280_uses_spi(struct sensor_itf *itf)
+{
+    return ((struct bmp280 *)(itf->si_dev))->node_is_spi;
+}
+#endif
+
 static int
 bmp280_default_cfg(struct bmp280_cfg *cfg)
 {
@@ -919,6 +927,9 @@ bmp280_writelen(struct sensor_itf *itf, uint8_t addr, uint8_t *payload,
 #if MYNEWT_VAL(BUS_DRIVER_PRESENT)
     uint8_t data[2] = { addr };
 
+    if (bmp280_uses_spi(itf)) {
+        data[0] &= ~BMP280_SPI_READ_CMD_BIT;
+    }
     do {
         data[1] = *(payload++);
         rc = bus_node_simple_write(itf->si_dev, data, 2);
@@ -1367,6 +1378,8 @@ bmp280_create_i2c_sensor_dev(struct bus_i2c_node *node, const char *name,
     };
     int rc;
 
+    ((struct bmp280 *)(node))->node_is_spi = false;
+
     bus_node_set_callbacks((struct os_dev *)node, &cbs);
 
     rc = bus_i2c_node_create(name, node, i2c_cfg, sensor_itf);
@@ -1384,6 +1397,8 @@ bmp280_create_spi_sensor_dev(struct bus_spi_node *node, const char *name,
     };
     int rc;
 
+    ((struct bmp280 *)(node))->node_is_spi = true;
+
     bus_node_set_callbacks((struct os_dev *)node, &cbs);
 
     rc = bus_spi_node_create(name, node, spi_cfg, sensor_itf);


[mynewt-core] 04/05: sensors/bmp280: Add bus driver support to bmp280 cli

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit c84b1c7f8dc35fa4c0699c67061b21d4ca84a773
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Wed Jun 12 16:36:26 2019 +0200

    sensors/bmp280: Add bus driver support to bmp280 cli
    
    sensor_itf is not enough to access bmp280 when bus driver
    is used.
    This implementation uses it's own device instance not the
    one that sensor_creator could created, reason for this is
    that if there is a problem accessing device due to invalid
    configuration, sensor_creator created device will assert
    during creation when cofiguratio is verified.
---
 hw/drivers/sensors/bmp280/src/bmp280_shell.c | 53 ++++++++++++++++++++++++++++
 hw/drivers/sensors/bmp280/syscfg.yml         |  3 ++
 2 files changed, 56 insertions(+)

diff --git a/hw/drivers/sensors/bmp280/src/bmp280_shell.c b/hw/drivers/sensors/bmp280/src/bmp280_shell.c
index e48f8d4..3b0c0e5 100644
--- a/hw/drivers/sensors/bmp280/src/bmp280_shell.c
+++ b/hw/drivers/sensors/bmp280/src/bmp280_shell.c
@@ -24,6 +24,7 @@
 #include "hal/hal_gpio.h"
 #include "bmp280/bmp280.h"
 #include "bmp280_priv.h"
+#include "bsp/bsp.h"
 
 #if MYNEWT_VAL(BMP280_CLI)
 
@@ -37,12 +38,16 @@ static struct shell_cmd bmp280_shell_cmd_struct = {
     .sc_cmd_func = bmp280_shell_cmd
 };
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+static struct sensor_itf g_sensor_itf;
+#else
 static struct sensor_itf g_sensor_itf = {
     .si_type = MYNEWT_VAL(BMP280_SHELL_ITF_TYPE),
     .si_num = MYNEWT_VAL(BMP280_SHELL_ITF_NUM),
     .si_cs_pin = MYNEWT_VAL(BMP280_SHELL_CSPIN),
     .si_addr = MYNEWT_VAL(BMP280_SHELL_ITF_ADDR)
 };
+#endif
 
 static int
 bmp280_shell_err_too_many_args(char *cmd_name)
@@ -399,11 +404,59 @@ bmp280_shell_cmd(int argc, char **argv)
     return bmp280_shell_err_unknown_arg(argv[1]);
 }
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+
+#if MYNEWT_VAL(BMP280_SHELL_ITF_TYPE) == SENSOR_ITF_I2C
+struct bmp280 bmp280_raw;
+
+static const struct bus_i2c_node_cfg bmp280_raw_cfg = {
+    .node_cfg = {
+        .bus_name = MYNEWT_VAL(BMP280_SHELL_ITF_BUS),
+    },
+    .addr = MYNEWT_VAL(BMP280_SHELL_ITF_ADDR),
+    .freq = 400,
+};
+#elif MYNEWT_VAL(BMP280_SHELL_ITF_TYPE) == SENSOR_ITF_SPI
+struct bmp280 bmp280_raw = {
+    .node_is_spi = true,
+};
+
+static const struct bus_spi_node_cfg bmp280_raw_cfg = {
+    .node_cfg = {
+        .bus_name = MYNEWT_VAL(BMP280_SHELL_ITF_BUS),
+    },
+    .pin_cs = MYNEWT_VAL(BMP280_SHELL_CSPIN),
+    .data_order = BUS_SPI_DATA_ORDER_MSB,
+    .mode = BUS_SPI_MODE_0,
+    .freq = 4000,
+};
+#endif
+
+#endif
+
 int
 bmp280_shell_init(void)
 {
     int rc;
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    struct os_dev *dev = NULL;
+
+    g_sensor_itf.si_dev = (struct os_dev *)&bmp280_raw;
+#if MYNEWT_VAL(BMP280_SHELL_ITF_TYPE) == SENSOR_ITF_I2C
+    rc = bus_i2c_node_create("bmp280_raw", &bmp280_raw.i2c_node,
+                             &bmp280_raw_cfg, &g_sensor_itf);
+#elif MYNEWT_VAL(BMP280_SHELL_ITF_TYPE) == SENSOR_ITF_SPI
+    rc = bus_spi_node_create("bmp280_raw", &bmp280_raw.spi_node,
+                             &bmp280_raw_cfg, &g_sensor_itf);
+#endif
+    if (rc == 0) {
+        dev = os_dev_open("bmp280_raw", 0, NULL);
+    }
+    if (rc != 0 || dev == NULL) {
+        console_printf("Failed to create bmp280_raw device\n");
+    }
+#endif
     rc = shell_cmd_register(&bmp280_shell_cmd_struct);
     SYSINIT_PANIC_ASSERT(rc == 0);
 
diff --git a/hw/drivers/sensors/bmp280/syscfg.yml b/hw/drivers/sensors/bmp280/syscfg.yml
index 8265acd..263a6eb 100644
--- a/hw/drivers/sensors/bmp280/syscfg.yml
+++ b/hw/drivers/sensors/bmp280/syscfg.yml
@@ -27,6 +27,9 @@ syscfg.defs:
     BMP280_SHELL_ITF_TYPE:
         description: 'Shell interface type for the BMP280'
         value: 1
+    BMP280_SHELL_ITF_BUS:
+        description: 'Shell interface bus for the BMP280 when bus driver is used'
+        value: '"i2c0"'
     BMP280_SHELL_CSPIN:
         description: 'CS pin for BMP280'
         value : -1


[mynewt-core] 01/05: sensors/bmp280: Fix shell oversample command

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 2c4cebe58b2fde9d9809d6bcda488268cc1880be
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Wed Jun 12 12:03:23 2019 +0200

    sensors/bmp280: Fix shell oversample command
    
    Due to various incorrect condition checking oversample
    command was broken.
    
    - checking argc > 3 made setting value impossible
      (now it checks against 4).
    - querying oversampling with 5 6 argument never read any values
      from device since driver expected bit mask instead of bit position.
    - now 'bmp280 oversample' will print both pressure and temperature
      settings.
---
 hw/drivers/sensors/bmp280/src/bmp280_shell.c | 40 +++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 7 deletions(-)

diff --git a/hw/drivers/sensors/bmp280/src/bmp280_shell.c b/hw/drivers/sensors/bmp280/src/bmp280_shell.c
index 26dbb9d..50634f2 100644
--- a/hw/drivers/sensors/bmp280/src/bmp280_shell.c
+++ b/hw/drivers/sensors/bmp280/src/bmp280_shell.c
@@ -160,17 +160,43 @@ bmp280_shell_cmd_oversample(int argc, char **argv)
     uint8_t oversample;
     uint32_t type;
 
-    if (argc > 3) {
+    if (argc > 4) {
         return bmp280_shell_err_too_many_args(argv[1]);
     }
 
-    /* Display the oversample */
-    if (argc == 3) {
-        val = parse_ll_bounds(argv[2], 4, 8, &rc);
+    /* Display the oversampling */
+    if (argc == 2) {
+        rc = bmp280_get_oversample(&g_sensor_itf,
+                                   SENSOR_TYPE_AMBIENT_TEMPERATURE, &oversample);
+        if (rc == 0) {
+            if (oversample == 0) {
+                console_printf("Temperature measurement disabled\n");
+            } else {
+                console_printf("Temperature oversampling %u (x%u)\n",
+                               oversample, 1U << (oversample - 1));
+            }
+        } else {
+            console_printf("Error reading temperature oversampling %d\n", rc);
+        }
+        rc = bmp280_get_oversample(&g_sensor_itf, SENSOR_TYPE_PRESSURE,
+                                   &oversample);
+        if (rc == 0) {
+            if (oversample == 0) {
+                console_printf("Pressure measurement disabled\n");
+            } else {
+                console_printf("Pressure oversampling %u (x%u)\n",
+                               oversample, 1U << (oversample - 1));
+            }
+        } else {
+            console_printf("Error reading pressure oversampling %d\n", rc);
+        }
+    } else if (argc == 3) {
+        /* Display the oversample */
+        val = (uint8_t)parse_ll_bounds(argv[2], 5, 6, &rc);
         if (rc) {
             return bmp280_shell_err_invalid_arg(argv[2]);
         }
-        rc = bmp280_get_oversample(&g_sensor_itf, val, &oversample);
+        rc = bmp280_get_oversample(&g_sensor_itf, 1U << val, &oversample);
         if (rc) {
             goto err;
         }
@@ -179,12 +205,12 @@ bmp280_shell_cmd_oversample(int argc, char **argv)
 
     /* Update the oversampling  */
     if (argc == 4) {
-        val = parse_ll_bounds(argv[2], 4, 8, &rc);
+        val = (uint8_t)parse_ll_bounds(argv[2], 5, 6, &rc);
         if (rc) {
             return bmp280_shell_err_invalid_arg(argv[2]);
         }
 
-        type = val;
+        type = 1U << val;
 
         val = parse_ll_bounds(argv[3], 0, 5, &rc);
         if (rc) {