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

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

commit 0dde220e79d840c32d5b1d09844a936f6372d4c0
Author: Andrzej Kaczmarek <andrzej.kaczma...@codecoup.pl>
AuthorDate: Fri Nov 23 17:25:40 2018 +0100

    hw/drivers: Add bus driver support to MS5837
---
 hw/drivers/sensors/ms5837/include/ms5837/ms5837.h | 25 +++++++++++++
 hw/drivers/sensors/ms5837/src/ms5837.c            | 43 ++++++++++++++++++++++-
 2 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/hw/drivers/sensors/ms5837/include/ms5837/ms5837.h 
b/hw/drivers/sensors/ms5837/include/ms5837/ms5837.h
index d4bcbca..2342d74 100644
--- a/hw/drivers/sensors/ms5837/include/ms5837/ms5837.h
+++ b/hw/drivers/sensors/ms5837/include/ms5837/ms5837.h
@@ -23,6 +23,10 @@
 
 #include "os/mynewt.h"
 #include "sensor/sensor.h"
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+#include "bus/bus_driver.h"
+#include "bus/i2c.h"
+#endif
 
 #define MS5837_I2C_ADDRESS             0x76
 #define MS5837_NUMBER_COEFFS     7
@@ -42,7 +46,11 @@ struct ms5837_cfg {
 };
 
 struct ms5837 {
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    struct bus_i2c_node i2c_node;
+#else
     struct os_dev dev;
+#endif
     struct sensor sensor;
     struct ms5837_cfg cfg;
     struct ms5837_pdd pdd;
@@ -164,6 +172,23 @@ float
 ms5837_compensate_temperature(uint16_t *coeffs, uint32_t rawtemp,
                               int32_t *comptemp, int32_t *deltat);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+/**
+ * Create I2C bus node for MS5837 sensor
+ *
+ * @param node        Bus node
+ * @param name        Device name
+ * @param i2c_cfg     I2C node configuration
+ * @param sensor_itf  Sensors interface
+ *
+ * @return 0 on success, non-zero on failure
+ */
+int
+ms5837_create_i2c_sensor_dev(struct bus_i2c_node *node, const char *name,
+                             const struct bus_i2c_node_cfg *i2c_cfg,
+                             struct sensor_itf *sensor_itf);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/hw/drivers/sensors/ms5837/src/ms5837.c 
b/hw/drivers/sensors/ms5837/src/ms5837.c
index 8a2b92c..661ca18 100644
--- a/hw/drivers/sensors/ms5837/src/ms5837.c
+++ b/hw/drivers/sensors/ms5837/src/ms5837.c
@@ -23,8 +23,12 @@
 #include <string.h>
 
 #include "os/mynewt.h"
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+#include "bus/bus.h"
+#else
 #include "hal/hal_i2c.h"
 #include "i2cn/i2cn.h"
+#endif
 #include "sensor/sensor.h"
 #include "ms5837/ms5837.h"
 #include "sensor/temperature.h"
@@ -324,6 +328,11 @@ ms5837_writelen(struct sensor_itf *itf, uint8_t addr, 
uint8_t *buffer,
 {
     int rc;
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    assert(len == 0);
+
+    rc = bus_node_simple_write(itf->si_dev, &addr, 1);
+#else
     struct hal_i2c_master_data data_struct = {
         .address = itf->si_addr,
         .len = 1,
@@ -345,6 +354,7 @@ ms5837_writelen(struct sensor_itf *itf, uint8_t addr, 
uint8_t *buffer,
     }
 
     sensor_itf_unlock(itf);
+#endif
 
     return rc;
 }
@@ -364,8 +374,11 @@ ms5837_readlen(struct sensor_itf *itf, uint8_t addr, 
uint8_t *buffer,
                uint8_t len)
 {
     int rc;
-    uint8_t payload[3] = {addr, 0, 0};
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    rc = bus_node_simple_write_read_transact(itf->si_dev, &addr, 1, buffer, 
len);
+#else
+    uint8_t payload[3] = {addr, 0, 0};
     struct hal_i2c_master_data data_struct = {
         .address = itf->si_addr,
         .len = 1,
@@ -407,6 +420,7 @@ ms5837_readlen(struct sensor_itf *itf, uint8_t addr, 
uint8_t *buffer,
 
 err:
     sensor_itf_unlock(itf);
+#endif
 
     return rc;
 }
@@ -697,3 +711,30 @@ ms5837_crc_check(uint16_t *prom, uint8_t crc)
 
     return  (rem != crc);
 }
+
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+static void
+init_node_cb(struct bus_node *bnode, void *arg)
+{
+    struct sensor_itf *itf = arg;
+
+    ms5837_init((struct os_dev *)bnode, itf);
+}
+
+int
+ms5837_create_i2c_sensor_dev(struct bus_i2c_node *node, const char *name,
+                             const struct bus_i2c_node_cfg *i2c_cfg,
+                             struct sensor_itf *sensor_itf)
+{
+    struct bus_node_callbacks cbs = {
+        .init = init_node_cb,
+    };
+    int rc;
+
+    bus_node_set_callbacks((struct os_dev *)node, &cbs);
+
+    rc = bus_i2c_node_create(name, node, i2c_cfg, sensor_itf);
+
+    return rc;
+}
+#endif

Reply via email to