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