From 734256aab67aabab0c036c945619fbea12551310 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie <alexandre.abadie@inria.fr> Date: Tue, 17 Apr 2018 10:10:25 +0200 Subject: [PATCH] drivers/io1_xplained: add support for light sensor --- drivers/Makefile.dep | 1 + drivers/include/io1_xplained.h | 15 +++++++++++-- .../include/io1_xplained_internals.h | 12 ++++++++++- drivers/io1_xplained/io1_xplained.c | 21 ++++++++++++++++++- 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/drivers/Makefile.dep b/drivers/Makefile.dep index 078dd14b56..0990b8dc9e 100644 --- a/drivers/Makefile.dep +++ b/drivers/Makefile.dep @@ -152,6 +152,7 @@ endif ifneq (,$(filter io1_xplained,$(USEMODULE))) FEATURES_REQUIRED += periph_gpio + FEATURES_REQUIRED += periph_adc USEMODULE += at30tse75x USEMODULE += sdcard_spi endif diff --git a/drivers/include/io1_xplained.h b/drivers/include/io1_xplained.h index d5a6089838..16d75ec8e8 100644 --- a/drivers/include/io1_xplained.h +++ b/drivers/include/io1_xplained.h @@ -53,11 +53,12 @@ enum { IO1_XPLAINED_OK = 0, /**< Initialization successful */ IO1_XPLAINED_NOTEMP, /**< Error during temperature sensor initialization */ IO1_XPLAINED_NOSDCARD, /**< Error during sdcard initialization */ + IO1_XPLAINED_NOLIGHT, /**< Error during light sensor (ADC) initialization */ IO1_XPLAINED_NOLED, /**< Error during extension LED initialization */ IO1_XPLAINED_NOGPIO1, /**< Error during extension GPIO1 initialization */ IO1_XPLAINED_NOGPIO2, /**< Error during extension GPIO2 initialization */ - IO1_XPLAINED_READ_OK, /**< Temperature read successful */ - IO1_XPLAINED_READ_ERR /**< Error when reading temperature sensor */ + IO1_XPLAINED_READ_OK, /**< Light sensor read successful */ + IO1_XPLAINED_READ_ERR /**< Error when reading light sensor */ }; /** @@ -91,6 +92,16 @@ typedef struct { */ int io1_xplained_init(io1_xplained_t *dev, const io1_xplained_params_t *params); +/** + * @brief Read light sensor level on the IO1 Xplained extension + * + * @param[out] light Light level value (between 0 and 1023) + * + * @return IO1_XPLAINED_READ_OK on success + * @return -IO1_XPLAINED_READ_ERR when the value cannot be read + */ +int io1_xplained_read_light_level(uint16_t *light); + #ifdef __cplusplus } #endif diff --git a/drivers/io1_xplained/include/io1_xplained_internals.h b/drivers/io1_xplained/include/io1_xplained_internals.h index b5b9383d02..19998da08b 100644 --- a/drivers/io1_xplained/include/io1_xplained_internals.h +++ b/drivers/io1_xplained/include/io1_xplained_internals.h @@ -22,7 +22,9 @@ #include "cpu.h" #include "periph_cpu.h" - +#include "periph/adc.h" +#include "periph/gpio.h" +#include "periph/spi.h" #ifdef __cplusplus extern "C" { @@ -50,6 +52,14 @@ extern "C" { #define IO1_SDCARD_SPI_PARAM_DETECT GPIO_PIN(0,23) /** @} */ +/** + * @name IO1 Xplained Light sensor ADC configuration + * @{ + */ +#define IO1_LIGHT_ADC_LINE ADC_LINE(0) +#define IO1_LIGHT_ADC_RES ADC_RES_10BIT +/** @} */ + /** * @name IO1 Xplained LED pin * @{ diff --git a/drivers/io1_xplained/io1_xplained.c b/drivers/io1_xplained/io1_xplained.c index 5f8aef68ca..16c6d053a8 100644 --- a/drivers/io1_xplained/io1_xplained.c +++ b/drivers/io1_xplained/io1_xplained.c @@ -24,7 +24,7 @@ #include "at30tse75x.h" #include "sdcard_spi.h" -#include "periph/adc.h" +#include "periph/i2c.h" #include "periph/gpio.h" #define ENABLE_DEBUG (0) @@ -73,6 +73,11 @@ int io1_xplained_init(io1_xplained_t *dev, const io1_xplained_params_t *params) } } + if (adc_init(IO1_LIGHT_ADC_LINE) < 0) { + DEBUG("[io1_xplained] Light sensor (ADC) initialization failed\n"); + return -IO1_XPLAINED_NOLIGHT; + } + if (gpio_init(IO1_LED_PIN, GPIO_OUT) < 0) { DEBUG("[io1_xplained] LED initialization failed\n"); return -IO1_XPLAINED_NOLED; @@ -92,3 +97,17 @@ int io1_xplained_init(io1_xplained_t *dev, const io1_xplained_params_t *params) return IO1_XPLAINED_OK; } + +int io1_xplained_read_light_level(uint16_t *light) +{ + int sample = adc_sample(IO1_LIGHT_ADC_LINE, IO1_LIGHT_ADC_RES); + + if (sample < 0) { + DEBUG("[io1_xplained] Light sensor read failed\n"); + return -IO1_XPLAINED_READ_ERR; + } + + *light = (1023 - sample); + + return IO1_XPLAINED_READ_OK; +} -- GitLab