From f5658cd89a797a3e21ca04021c3f73390c5ddd1c Mon Sep 17 00:00:00 2001 From: Matthew Blue Date: Wed, 4 Apr 2018 17:30:48 -0400 Subject: [PATCH] drivers/ads101x: auto_init support --- sys/auto_init/auto_init.c | 4 ++ sys/auto_init/saul/auto_init_ads101x.c | 78 ++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 sys/auto_init/saul/auto_init_ads101x.c diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index 098b9cd554..a3f0f85534 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -371,6 +371,10 @@ auto_init_mpu9150(); extern void auto_init_adcxx1c(void); auto_init_adcxx1c(); #endif +#ifdef MODULE_ADS101X + extern void auto_init_ads101x(void); + auto_init_ads101x(); +#endif #ifdef MODULE_LIS2DH12 extern void auto_init_lis2dh12(void); auto_init_lis2dh12(); diff --git a/sys/auto_init/saul/auto_init_ads101x.c b/sys/auto_init/saul/auto_init_ads101x.c new file mode 100644 index 0000000000..46c8cfe772 --- /dev/null +++ b/sys/auto_init/saul/auto_init_ads101x.c @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2017 OTA keys S.A. + * 2018 Matthew Blue + * + * 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 auto_init_saul + * @{ + * + * @file + * @brief Auto initialization of ADS101x/111x ADCs + * + * @author Vincent Dupont + * @author Matthew Blue + * + * @} + */ + +#ifdef MODULE_ADS101X + +#include "assert.h" +#include "log.h" + +#include "saul_reg.h" +#include "ads101x.h" +#include "ads101x_params.h" + +/** + * @brief Define the number of configured sensors + */ +#define ADS101X_NUM (sizeof(ads101x_params) / sizeof(ads101x_params[0])) + +/** + * @brief Allocate memory for the device descriptors + */ +static ads101x_t ads101x_devs[ADS101X_NUM]; + +/** + * @brief Memory for the SAUL registry entries + */ +static saul_reg_t saul_entries[ADS101X_NUM]; + +/** + * @brief Define the number of saul info + */ +#define ADS101X_INFO_NUM (sizeof(ads101x_saul_info) / sizeof(ads101x_saul_info[0])) + +/** + * @brief Reference the driver struct + */ +extern saul_driver_t ads101x_saul_driver; + +void auto_init_ads101x(void) +{ + assert(ADS101X_INFO_NUM == ADS101X_NUM); + + for (unsigned i = 0; i < ADS101X_NUM; i++) { + LOG_DEBUG("[auto_init_saul] initializing ads101x #%d\n", i); + if (ads101x_init(&ads101x_devs[i], &ads101x_params[i]) < 0) { + LOG_ERROR("[auto_init_saul] error initializing ads101x #%d\n", i); + continue; + } + + saul_entries[i].dev = &(ads101x_devs[i]); + saul_entries[i].name = ads101x_saul_info[i].name; + saul_entries[i].driver = &ads101x_saul_driver; + saul_reg_add(&(saul_entries[i])); + } +} + +#else +typedef int dont_be_pedantic; +#endif /* MODULE_ADS101X */