drivers/tmp00x : Expose to Kconfig

Expose configurations to Kconfig

Co-authored-by: Leandro Lanzieri <leandro.lanzieri@haw-hamburg.de>
This commit is contained in:
Akshai M 2020-04-30 15:03:21 +05:30
parent 414fae5b0c
commit 74a7bb230b
5 changed files with 120 additions and 43 deletions

View File

@ -27,6 +27,7 @@ rsource "mma8x5x/Kconfig"
rsource "opt3001/Kconfig"
rsource "sps30/Kconfig"
rsource "tcs37727/Kconfig"
rsource "tmp00x/Kconfig"
endmenu # Sensor Device Drivers
menu "Storage Device Drivers"

View File

@ -101,8 +101,10 @@ extern "C"
/**
* @brief Default Address
*
* I2C Address depends on the state of ADR0 and ADR1 Pins
* For more information, please refer to section 7.3.6.2 of TMP007 datasheet (SBOS685B).
* TMP006/TMP007 allows for up to 8 devices on a single bus. The address value
* depends on the state of ADR0 and ADR1 pins. Default value (0x40) corresponds
* to ADR0 and ADR1 pins tied to GND. For more information refer to the 'Serial
* Bus Address' section in the datasheet.
*/
#ifndef CONFIG_TMP00X_I2C_ADDRESS
#define CONFIG_TMP00X_I2C_ADDRESS (0x40)
@ -110,7 +112,23 @@ extern "C"
/**
* @brief Default Conversion Time in us
*
* The duration of the analog-to-digital(A/D) conversion is determined by the
* conversion rate bits CR0, CR1 and CR2. For more information refer to the
* datasheet.
*/
#if IS_ACTIVE(CONFIG_TMP00X_CONVERSION_TIME_0_25S)
#define CONFIG_TMP00X_CONVERSION_TIME (25E4)
#elif IS_ACTIVE(CONFIG_TMP00X_CONVERSION_TIME_0_5S)
#define CONFIG_TMP00X_CONVERSION_TIME (5E5)
#elif IS_ACTIVE(CONFIG_TMP00X_CONVERSION_TIME_1S)
#define CONFIG_TMP00X_CONVERSION_TIME (1E6)
#elif IS_ACTIVE(CONFIG_TMP00X_CONVERSION_TIME_2S)
#define CONFIG_TMP00X_CONVERSION_TIME (2E6)
#elif IS_ACTIVE(CONFIG_TMP00X_CONVERSION_TIME_4S)
#define CONFIG_TMP00X_CONVERSION_TIME (4E6)
#endif
#ifndef CONFIG_TMP00X_CONVERSION_TIME
#define CONFIG_TMP00X_CONVERSION_TIME (1E6)
#endif
@ -130,8 +148,8 @@ extern "C"
/**
* @brief Default raw value mode
*
* Set this to 1 to return raw adc readings otherwise
* measurements will be converted to Celsius.
* Set this to 1 to return raw adc readings otherwise measurements will be
* converted to Celsius.
*/
#ifdef DOXYGEN
#define CONFIG_TMP00X_USE_RAW_VALUES

64
drivers/tmp00x/Kconfig Normal file
View File

@ -0,0 +1,64 @@
# Copyright (c) 2020 Freie Universitaet Berlin
#
# 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.
#
menuconfig KCONFIG_MODULE_TMP00X
bool "Configure TMP00X driver"
depends on MODULE_TMP00X
help
Configure the TMP00X driver using Kconfig.
if KCONFIG_MODULE_TMP00X
config TMP00X_I2C_ADDRESS
hex "Default I2C Address"
range 0x40 0x47
default 0x40
help
TMP006/TMP007 allows for up to 8 devices on a single bus. The address
value depends on the state of ADR0 and ADR1 pins. Default value (0x40)
corresponds to ADR0 and ADR1 pins tied to GND. For more information
refer to the 'Serial Bus Address' section in the datasheet.
choice
bool "Conversion time"
default TMP00X_CONVERSION_TIME_1S
help
The duration of the analog-to-digital(A/D) conversion is determined by
the conversion rate bits CR0, CR1 and CR2. For more information refer
datasheet.
config TMP00X_CONVERSION_TIME_0_25S
bool "0.25 s"
config TMP00X_CONVERSION_TIME_0_5S
bool "0.5 s"
config TMP00X_CONVERSION_TIME_1S
bool "1 s"
config TMP00X_CONVERSION_TIME_2S
bool "2 s"
config TMP00X_CONVERSION_TIME_4S
bool "4 s"
endchoice
config TMP00X_USE_LOW_POWER
bool "Enable low power mode"
help
Enable this to put the device in low power mode between measurements.
By default the device will always be on. Enabling this also adds a delay
based on "Conversion time" to each measurement call for bringing the
device out of standby.
config TMP00X_USE_RAW_VALUES
bool "Enable raw ADC readings"
help
Enable this to return raw ADC readings. By default measurements are
converted to Celsius.
endif # KCONFIG_MODULE_TMP00X

View File

@ -34,10 +34,8 @@
#include "tmp00x_regs.h"
#include "byteorder.h"
#include "kernel_defines.h"
#if IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)
#include "xtimer.h"
#endif
#define ENABLE_DEBUG (0)
#include "debug.h"
@ -202,54 +200,50 @@ void tmp00x_convert(int16_t rawv, int16_t rawt, float *tamb, float *tobj)
int tmp00x_read_temperature(const tmp00x_t *dev, int16_t *ta, int16_t *to)
{
uint16_t drdy;
#if (!IS_ACTIVE(CONFIG_TMP00X_USE_RAW_VALUES))
int16_t rawtemp, rawvolt;
float tamb, tobj;
#endif
int ret;
#if IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)
if (IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)) {
if (tmp00x_set_active(dev)) {
return TMP00X_ERROR;
}
xtimer_usleep(CONFIG_TMP00X_CONVERSION_TIME);
#endif
}
int ret;
#if IS_ACTIVE(CONFIG_TMP00X_USE_RAW_VALUES)
if (IS_ACTIVE(CONFIG_TMP00X_USE_RAW_VALUES)) {
if ((ret = tmp00x_read(dev, to, ta, &drdy)) < 0) {
return ret;
}
if (!drdy) {
#if IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)
if (IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)) {
tmp00x_set_standby(dev);
#endif
}
return -TMP00X_ERROR;
}
#else
}
else {
if ((ret = tmp00x_read(dev, &rawvolt, &rawtemp, &drdy)) < 0) {
return ret;
}
if (!drdy) {
#if IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)
if (IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)) {
tmp00x_set_standby(dev);
#endif
}
return -TMP00X_ERROR;
}
tmp00x_convert(rawvolt, rawtemp, &tamb, &tobj);
*ta = (int16_t)(tamb*100);
*to = (int16_t)(tobj*100);
#endif
}
if (IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)) {
if (tmp00x_set_standby(dev)) {
return -TMP00X_ERROR;
}
}
return TMP00X_OK;
}