diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index 883ed40eef..e4d06852d0 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -429,6 +429,11 @@ auto_init_mpu9150(); auto_init_mma7660(); #endif +#ifdef MODULE_SHT3X + extern void auto_init_sht3x(void); + auto_init_sht3x(); +#endif + #endif /* MODULE_AUTO_INIT_SAUL */ #ifdef MODULE_AUTO_INIT_GNRC_RPL diff --git a/sys/auto_init/saul/auto_init_sht3x.c b/sys/auto_init/saul/auto_init_sht3x.c new file mode 100644 index 0000000000..8093166eca --- /dev/null +++ b/sys/auto_init/saul/auto_init_sht3x.c @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2018 Gunar Schorcht + * + * 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 + * @brief Auto initialization of Sensirion SHT30/SHT31/SHT35 device driver + * @author Gunar Schorcht + * @file + */ + +#ifdef MODULE_SHT3X + +#include "assert.h" +#include "log.h" +#include "saul_reg.h" +#include "sht3x.h" +#include "sht3x_params.h" + +/** + * @brief Define the number of configured sensors + */ +#define SHT3X_NUM (sizeof(sht3x_params) / sizeof(sht3x_params[0])) + +/** + * @brief Allocation of memory for device descriptors + */ +sht3x_dev_t sht3x_devs[SHT3X_NUM]; + +/** + * @brief Memory for the SAUL registry entries + */ +static saul_reg_t saul_entries[SHT3X_NUM * 2]; + +/** + * @brief Define the number of saul info + */ +#define SHT3X_INFO_NUM (sizeof(sht3x_saul_info) / sizeof(sht3x_saul_info[0])) + +/** + * @name Reference the driver structs. + * @{ + */ +extern const saul_driver_t sht3x_saul_driver_temperature; +extern const saul_driver_t sht3x_saul_driver_humidity; +/** @} */ + +void auto_init_sht3x(void) +{ + assert(SHT3X_INFO_NUM == SHT3X_NUM); + + for (unsigned i = 0; i < SHT3X_NUM; i++) { + LOG_DEBUG("[auto_init_saul] initializing sht3x #%u\n", i); + + if (sht3x_init(&sht3x_devs[i], + &sht3x_params[i]) != SHT3X_OK) { + LOG_ERROR("[auto_init_saul] error initializing sht3x #%u\n", i); + continue; + } + + /* temperature */ + saul_entries[(i * 2)].dev = &(sht3x_devs[i]); + saul_entries[(i * 2)].name = sht3x_saul_info[i].name; + saul_entries[(i * 2)].driver = &sht3x_saul_driver_temperature; + + /* relative humidity */ + saul_entries[(i * 2) + 1].dev = &(sht3x_devs[i]); + saul_entries[(i * 2) + 1].name = sht3x_saul_info[i].name; + saul_entries[(i * 2) + 1].driver = &sht3x_saul_driver_humidity; + + /* register to saul */ + saul_reg_add(&(saul_entries[(i * 2)])); + saul_reg_add(&(saul_entries[(i * 2) + 1])); + } +} +#else +typedef int dont_be_pedantic; +#endif /* MODULE_SHT3X */