diff --git a/drivers/include/lm75.h b/drivers/include/lm75.h index 3fb571953c..e1c6bd49dc 100755 --- a/drivers/include/lm75.h +++ b/drivers/include/lm75.h @@ -27,6 +27,7 @@ #ifndef LM75_H #define LM75_H +#include #include "periph/i2c.h" #include "periph/gpio.h" diff --git a/drivers/lm75/Kconfig b/drivers/lm75/Kconfig old mode 100755 new mode 100644 diff --git a/drivers/lm75/Makefile b/drivers/lm75/Makefile old mode 100755 new mode 100644 diff --git a/drivers/lm75/Makefile.dep b/drivers/lm75/Makefile.dep old mode 100755 new mode 100644 diff --git a/drivers/lm75/Makefile.include b/drivers/lm75/Makefile.include old mode 100755 new mode 100644 diff --git a/drivers/lm75/lm75.c b/drivers/lm75/lm75.c old mode 100755 new mode 100644 index 2a8d1d08c1..624f3c58c9 --- a/drivers/lm75/lm75.c +++ b/drivers/lm75/lm75.c @@ -39,25 +39,25 @@ #define TMP1075_CONFIG_ONE_SHOT_MODE 0x81 /* also sets the shutdown register to 1 */ #if IS_ACTIVE(MODULE_LM75A) - lm75_properties_t lm75a_properties = { - .os_res = LM75A_OS_RES, - .os_mult = LM75A_OS_MULT, - .temp_res = LM75A_TEMP_RES, - .temp_mult = LM75A_TEMP_MULT, - .os_shift = LM75A_OS_SHIFT, - .temp_shift = LM75A_TEMP_SHIFT, - }; - -#elif IS_ACTIVE(MODULE_TMP1075) - lm75_properties_t tmp1075_properties = { - .os_res = TMP1075_OS_RES, - .os_mult = TMP1075_OS_MULT, - .temp_res = TMP1075_TEMP_RES, - .temp_mult = TMP1075_TEMP_MULT, - .os_shift = TMP1075_OS_SHIFT, - .temp_shift = TMP1075_TEMP_SHIFT, - }; +lm75_properties_t lm75a_properties = { + .os_res = LM75A_OS_RES, + .os_mult = LM75A_OS_MULT, + .temp_res = LM75A_TEMP_RES, + .temp_mult = LM75A_TEMP_MULT, + .os_shift = LM75A_OS_SHIFT, + .temp_shift = LM75A_TEMP_SHIFT, +}; +#endif +#if IS_ACTIVE(MODULE_TMP1075) +lm75_properties_t tmp1075_properties = { + .os_res = TMP1075_OS_RES, + .os_mult = TMP1075_OS_MULT, + .temp_res = TMP1075_TEMP_RES, + .temp_mult = TMP1075_TEMP_MULT, + .os_shift = TMP1075_OS_SHIFT, + .temp_shift = TMP1075_TEMP_SHIFT, + }; #endif int lm75_init(lm75_t *dev, const lm75_params_t *params) { @@ -74,27 +74,27 @@ int lm75_init(lm75_t *dev, const lm75_params_t *params) { if (IS_USED(MODULE_TMP1075) && (dev->lm75_params.res == &tmp1075_properties)) { uint16_t deid = 0; if (i2c_read_regs(I2C_BUS, I2C_ADDR, TMP1075_DEVICE_ID_REG, &deid, 2, 0) != 0) { - LOG_ERROR("Error reading device ID\n"); + LOG_ERROR("lm75: error reading device ID\n"); } deid = (uint16_t)ntohs(deid); /* checks if the device ID corresponds to the TMP1075 sensor * and extends the parameter configuration if so */ if (deid == 0x7500) { - DEBUG("Device is a TMP1075\n"); + DEBUG("lm75: device is a TMP1075\n"); config |= (params->conv_rate_reg << 5); } else { - LOG_ERROR("Device ID Register doesnt match"); + LOG_ERROR("lm75: device ID Register doesnt match"); i2c_release(I2C_BUS); return LM75_ERROR; } } else if (IS_USED(MODULE_LM75A) && (dev->lm75_params.res == &lm75a_properties)) { - DEBUG("Device is an LM75A\n"); + DEBUG("lm75: device is an LM75A\n"); } else { - LOG_ERROR("Device not supported\n"); + LOG_ERROR("lm75: device not supported\n"); i2c_release(I2C_BUS); return LM75_ERROR; } @@ -164,7 +164,7 @@ int lm75_set_temp_limits(lm75_t *dev, int temp_hyst, int temp_os, gpio_cb_t cb, } if (temp_hyst >= temp_os) { - LOG_ERROR("THYST must be lower than TOS\n"); + LOG_ERROR("lm75: THYST must be lower than TOS\n"); return LM75_ERROR; } int16_t temp_hyst_short, temp_os_short; @@ -190,13 +190,13 @@ int lm75_set_temp_limits(lm75_t *dev, int temp_hyst, int temp_os, gpio_cb_t cb, if (i2c_write_regs(I2C_BUS, I2C_ADDR, LM75_THYST_REG, &temp_hyst_short, 2, 0) != 0) { i2c_release(I2C_BUS); - LOG_ERROR("ERROR wrtiting Hyst temp\n"); + LOG_ERROR("lm75: ERROR wrtiting Hyst temp\n"); return LM75_ERROR_I2C; } if (i2c_write_regs(I2C_BUS, I2C_ADDR, LM75_TOS_REG, &temp_os_short, 2, 0) != 0) { i2c_release(I2C_BUS); - LOG_ERROR("ERROR writing OS temp\n"); + LOG_ERROR("lm75: ERROR writing OS temp\n"); return LM75_ERROR_I2C; } @@ -250,7 +250,7 @@ int lm75_get_hyst_temp(lm75_t *dev, int *temperature) { int lm75_get_os_pin(lm75_t *dev, bool *os_pin_state) { if (!gpio_is_valid(dev->lm75_params.gpio_alarm)) { - LOG_ERROR("OS alert pin not connected or defined\n"); + LOG_ERROR("lm75: OS alert pin not connected or defined\n"); return LM75_ERROR; } @@ -273,7 +273,7 @@ int lm75_poweroff(lm75_t *dev) { /* sets every register to 0 except the shutdown reg and sees if it is active */ if ((config & LM75_CONFIG_SHUTDOWN_MODE) != 0) { - LOG_ERROR("device already in shutdown mode\n"); + LOG_ERROR("lm75: device already in shutdown mode\n"); i2c_release(I2C_BUS); return LM75_SUCCESS; } @@ -303,7 +303,7 @@ int lm75_poweron(lm75_t *dev) { /* sets every reg to 0 except the shutdown register and sees if it is active */ if ((config & LM75_CONFIG_SHUTDOWN_MODE) == 0) { - LOG_INFO("device is already awake\n"); + LOG_INFO("lm75: device is already awake\n"); i2c_release(I2C_BUS); return LM75_SUCCESS; } @@ -323,7 +323,7 @@ int lm75_poweron(lm75_t *dev) { int tmp1075_one_shot(lm75_t *dev) { if (!IS_USED(MODULE_TMP1075) && (dev->lm75_params.res != &tmp1075_properties)) { - LOG_ERROR("Device incompatible with the one shot conversion function\n"); + LOG_ERROR("lm75: device incompatible with the one shot conversion function\n"); return LM75_ERROR; } diff --git a/drivers/lm75/lm75_saul.c b/drivers/lm75/lm75_saul.c new file mode 100644 index 0000000000..9af79e2293 --- /dev/null +++ b/drivers/lm75/lm75_saul.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 ML!PA Consulting GmbH + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup drivers_lm75 + * @{ + * + * @file + * @brief SAUL adaption for lm75 compatible device + * + * @author Benjamin Valentin + * + * @} + */ + +#include + +#include "saul.h" +#include "lm75.h" + +static int read_temperature(const void *dev, phydat_t *res) +{ + int temperature; + + lm75_get_temperature((lm75_t *)dev, &temperature); + res->val[0] = temperature / 10; /* phydat_t is 16 bit */ + res->unit = UNIT_TEMP_C; + res->scale = -2; + return 1; +} + +const saul_driver_t lm75_temperature_saul_driver = { + .read = read_temperature, + .write = saul_notsup, + .type = SAUL_SENSE_TEMP +}; diff --git a/drivers/saul/init_devs/auto_init_lm75.c b/drivers/saul/init_devs/auto_init_lm75.c new file mode 100644 index 0000000000..cb510a6a43 --- /dev/null +++ b/drivers/saul/init_devs/auto_init_lm75.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2021 ML!PA Consulting GmbH + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup sys_auto_init_saul + * @{ + * + * @file + * @brief Auto initialization of lm75 compatible driver. + * + * @author Benjamin Valentin + * + * @} + */ + +#include "assert.h" +#include "log.h" +#include "saul_reg.h" +#include "lm75.h" +#include "lm75_params.h" + +/** + * @brief Define the number of configured sensors + */ +#define LM75_NUMOF ARRAY_SIZE(lm75_params) + +/** + * @brief Allocation of memory for device descriptors + */ +static lm75_t lm75_devs[LM75_NUMOF]; + +/** + * @brief Memory for the SAUL registry entries + */ +static saul_reg_t saul_entries[LM75_NUMOF]; + +/** + * @brief Reference the driver structs. + */ +extern const saul_driver_t lm75_temperature_saul_driver; + +void auto_init_lm75(void) +{ + for (unsigned i = 0; i < LM75_NUMOF; i++) { + LOG_DEBUG("[auto_init_saul] initializing lm75 #%u\n", i); + + if (lm75_init(&lm75_devs[i], &lm75_params[i]) < 0) { + LOG_ERROR("[auto_init_saul] error initializing lm75 #%u\n", i); + continue; + } + + /* temperature */ + saul_entries[i].dev = &lm75_devs[i]; + saul_entries[i].name = "lm75"; + saul_entries[i].driver = &lm75_temperature_saul_driver; + + /* register to saul */ + saul_reg_add(&(saul_entries[i])); + } +} diff --git a/drivers/saul/init_devs/init.c b/drivers/saul/init_devs/init.c index 32d18f07e5..ebacd494e8 100644 --- a/drivers/saul/init_devs/init.c +++ b/drivers/saul/init_devs/init.c @@ -171,6 +171,10 @@ void saul_init_devs(void) extern void auto_init_lis3mdl(void); auto_init_lis3mdl(); } + if (IS_USED(MODULE_LM75)) { + extern void auto_init_lm75(void); + auto_init_lm75(); + } if (IS_USED(MODULE_LPSXXX)) { extern void auto_init_lpsxxx(void); auto_init_lpsxxx(); diff --git a/tests/driver_lm75/Makefile b/tests/driver_lm75/Makefile old mode 100755 new mode 100644 diff --git a/tests/driver_lm75/main.c b/tests/driver_lm75/main.c old mode 100755 new mode 100644 index c7ab466cd0..76c5ecb282 --- a/tests/driver_lm75/main.c +++ b/tests/driver_lm75/main.c @@ -121,7 +121,6 @@ int main(void) { /* Set the hysteresis and overtemperature shutdown */ if (lm75_set_temp_limits(dev, 24500, 29000, cb, NULL) != LM75_SUCCESS) { puts("error setting Hyst and/or OS temps"); - return -1; } lm75_check_set_temperature_limits(dev);