Merge pull request #13989 from akshaim/Kconfig_tmp00x_1

drivers/tmp00x : Expose Configurations to Kconfig
This commit is contained in:
Leandro Lanzieri 2020-05-20 17:48:18 +02:00 committed by GitHub
commit 2a8d6920e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 156 additions and 73 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

@ -83,6 +83,7 @@
#include <stdint.h>
#include <stdbool.h>
#include "periph/i2c.h"
#include "kernel_defines.h"
#ifdef __cplusplus
extern "C"
@ -100,40 +101,58 @@ 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 TMP00X_I2C_ADDRESS
#define TMP00X_I2C_ADDRESS (0x40)
#ifndef CONFIG_TMP00X_I2C_ADDRESS
#define CONFIG_TMP00X_I2C_ADDRESS (0x40)
#endif
/**
* @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.
*/
#ifndef TMP00X_CONVERSION_TIME
#define TMP00X_CONVERSION_TIME (1E6)
#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
/**
* @brief Default low power mode
*
* If set to 0, the device will be always-on
* If set to 1, the device will be put in low power mode between measurements.
* This adds a @c TMP00X_CONVERSION_TIME us delay to each measurement call
* for bringing the device out of standby.
* Set this to 1 to put the device in low power mode between measurements
* otherwise the device will always be on.
* Enabling this adds a @c CONFIG_TMP00X_CONVERSION_TIME us delay to each
* measurement call for bringing the device out of standby.
*/
#ifndef TMP00X_USE_LOW_POWER
#define TMP00X_USE_LOW_POWER (0)
#ifdef DOXYGEN
#define CONFIG_TMP00X_USE_LOW_POWER
#endif
/**
* @brief Default raw value mode
*
* If set to 0, measurements will be converted to Celsius.
* If set to 1, raw adc readings will be returned.
* Set this to 1 to return raw adc readings otherwise measurements will be
* converted to Celsius.
*/
#ifndef TMP00X_USE_RAW_VALUES
#define TMP00X_USE_RAW_VALUES (0)
#ifdef DOXYGEN
#define CONFIG_TMP00X_USE_RAW_VALUES
#endif
/** @} */

View File

@ -28,6 +28,7 @@
#include "tmp00x.h"
#include "tmp00x_params.h"
#include "kernel_defines.h"
/**
* @brief Define the number of configured sensors
@ -69,12 +70,12 @@ void auto_init_tmp00x(void)
LOG_ERROR("[auto_init_saul] error set active tmp00x #%u\n", i);
continue;
}
#if TMP00X_USE_LOW_POWER
if (IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)) {
if (tmp00x_set_standby(&tmp00x_devs[i]) != TMP00X_OK) {
LOG_ERROR("[auto_init_saul] error set standby tmp00x #%u\n", i);
continue;
}
#endif
}
saul_entries[i].dev = &(tmp00x_devs[i]);
saul_entries[i].name = tmp00x_saul_info[i].name;
saul_entries[i].driver = &tmp00x_saul_driver;

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

@ -36,7 +36,7 @@ extern "C" {
#define TMP00X_PARAM_I2C I2C_DEV(0)
#endif
#ifndef TMP00X_PARAM_ADDR
#define TMP00X_PARAM_ADDR (TMP00X_I2C_ADDRESS)
#define TMP00X_PARAM_ADDR (CONFIG_TMP00X_I2C_ADDRESS)
#endif
#ifndef TMP00X_PARAM_RATE
#define TMP00X_PARAM_RATE TMP00X_CONFIG_CR_DEF

View File

@ -32,10 +32,10 @@
#include "periph/i2c.h"
#include "tmp00x.h"
#include "tmp00x_regs.h"
#if TMP00X_USE_LOW_POWER
#include "xtimer.h"
#endif
#include "byteorder.h"
#include "kernel_defines.h"
#include "xtimer.h"
#define ENABLE_DEBUG (0)
#include "debug.h"
@ -200,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 (!TMP00X_USE_RAW_VALUES)
int16_t rawtemp, rawvolt;
float tamb, tobj;
#endif
int ret;
#if TMP00X_USE_LOW_POWER
if (IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)) {
if (tmp00x_set_active(dev)) {
return TMP00X_ERROR;
}
xtimer_usleep(TMP00X_CONVERSION_TIME);
#endif
xtimer_usleep(CONFIG_TMP00X_CONVERSION_TIME);
}
int ret;
#if 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 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 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 TMP00X_USE_LOW_POWER
if (IS_ACTIVE(CONFIG_TMP00X_USE_LOW_POWER)) {
if (tmp00x_set_standby(dev)) {
return -TMP00X_ERROR;
}
#endif
}
return TMP00X_OK;
}

View File

@ -22,6 +22,7 @@
#include "saul.h"
#include "tmp00x.h"
#include "kernel_defines.h"
static int read_temp(const void *dev, phydat_t *res)
{
@ -30,13 +31,14 @@ static int read_temp(const void *dev, phydat_t *res)
return -ECANCELED;
}
res->val[2] = 0;
#if TMP00X_USE_RAW_VALUES
if (IS_ACTIVE(CONFIG_TMP00X_USE_RAW_VALUES)) {
res->unit = UNIT_NONE;
res->scale = 0;
#else
}
else {
res->unit = UNIT_TEMP_C;
res->scale = -2;
#endif
}
return 2;
}

View File

@ -46,7 +46,7 @@ int main(void)
puts("start measurement [ERROR]");
return -1;
}
xtimer_usleep(TMP00X_CONVERSION_TIME);
xtimer_usleep(CONFIG_TMP00X_CONVERSION_TIME);
puts("[SUCCESS]\n");
while (1) {
@ -60,7 +60,7 @@ int main(void)
else {
puts("conversion in progress ... ");
}
xtimer_usleep(TMP00X_CONVERSION_TIME);
xtimer_usleep(CONFIG_TMP00X_CONVERSION_TIME);
}
return 0;