mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
drivers: si70xx: adapt for SAUL
This commit is contained in:
parent
9ba2e5372d
commit
0902ccb2e0
@ -111,6 +111,11 @@ ifneq (,$(filter sht11,$(USEMODULE)))
|
||||
USEMODULE += xtimer
|
||||
endif
|
||||
|
||||
ifneq (,$(filter si70xx,$(USEMODULE)))
|
||||
USEMODULE += xtimer
|
||||
FEATURES_REQUIRED += periph_i2c
|
||||
endif
|
||||
|
||||
ifneq (,$(filter srf02,$(USEMODULE)))
|
||||
USEMODULE += xtimer
|
||||
endif
|
||||
|
@ -21,8 +21,6 @@
|
||||
#ifndef SI70XX_H_
|
||||
#define SI70XX_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "periph/i2c.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -39,7 +37,7 @@ extern "C" {
|
||||
#define SI70XX_ADDRESS_SI7021 (0x80)
|
||||
|
||||
/**
|
||||
* @name Si70xx device commands
|
||||
* @name Si70xx device commands.
|
||||
* @{
|
||||
*/
|
||||
#define SI70XX_MEASURE_RH_HOLD (0xE5)
|
||||
@ -61,7 +59,7 @@ extern "C" {
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Si70xx register values
|
||||
* @name Si70xx register values.
|
||||
* @{
|
||||
*/
|
||||
#define SI70XX_ID_SI7006 (0x06)
|
||||
@ -74,13 +72,21 @@ extern "C" {
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief Si70xx device descriptor
|
||||
* @brief Si70xx device descriptor.
|
||||
*/
|
||||
typedef struct {
|
||||
i2c_t i2c_dev; /**< I2C bus the sensors is connected to */
|
||||
uint8_t address; /**< sensor address */
|
||||
} si70xx_t;
|
||||
|
||||
/**
|
||||
* @brief Device initialization parameters.
|
||||
*/
|
||||
typedef struct {
|
||||
i2c_t i2c_dev; /**< I2C bus the sensor is connected to */
|
||||
uint8_t address; /**< sensor address */
|
||||
} si70xx_params_t;
|
||||
|
||||
/**
|
||||
* @brief Test if the device id and revision number are as expected.
|
||||
*
|
||||
|
@ -19,12 +19,12 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "si70xx.h"
|
||||
|
||||
#include "xtimer.h"
|
||||
|
||||
#include "si70xx.h"
|
||||
|
||||
/**
|
||||
* @brief Utility method to perform and reconstruct a measurement.
|
||||
* @brief Utility method to perform and reconstruct a measurement.
|
||||
*/
|
||||
static uint32_t si70xx_measure(si70xx_t *dev, uint8_t command)
|
||||
{
|
||||
|
57
drivers/si70xx/si70xx_saul.c
Normal file
57
drivers/si70xx/si70xx_saul.c
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* 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 driver_si70xx
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief SAUL adoption for Si7006/13/20/21 sensor.
|
||||
*
|
||||
* @author Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "saul.h"
|
||||
|
||||
#include "si70xx.h"
|
||||
|
||||
static int read_temperature(void *dev, phydat_t *res)
|
||||
{
|
||||
si70xx_t *d = (si70xx_t *)dev;
|
||||
|
||||
res->val[0] = (int32_t) si70xx_get_temperature(d);
|
||||
res->unit = UNIT_TEMP_C;
|
||||
res->scale = -2;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int read_relative_humidity(void *dev, phydat_t *res)
|
||||
{
|
||||
si70xx_t *d = (si70xx_t *)dev;
|
||||
|
||||
res->val[0] = (int32_t) si70xx_get_relative_humidity(d);
|
||||
res->unit = UNIT_PERCENT;
|
||||
res->scale = -2;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
const saul_driver_t si70xx_temperature_saul_driver = {
|
||||
.read = read_temperature,
|
||||
.write = saul_notsup,
|
||||
.type = SAUL_SENSE_TEMP
|
||||
};
|
||||
|
||||
const saul_driver_t si70xx_relative_humidity_saul_driver = {
|
||||
.read = read_relative_humidity,
|
||||
.write = saul_notsup,
|
||||
.type = SAUL_SENSE_HUM
|
||||
};
|
@ -277,6 +277,10 @@ void auto_init(void)
|
||||
extern void auto_init_mma8652(void);
|
||||
auto_init_mma8652();
|
||||
#endif
|
||||
#ifdef MODULE_SI70XX
|
||||
extern void auto_init_si70xx(void);
|
||||
auto_init_si70xx();
|
||||
#endif
|
||||
|
||||
#endif /* MODULE_AUTO_INIT_SAUL */
|
||||
|
||||
|
81
sys/auto_init/saul/auto_init_si70xx.c
Normal file
81
sys/auto_init/saul/auto_init_si70xx.c
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* 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 Si70xx driver.
|
||||
*
|
||||
* @author Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef MODULE_SI70XX
|
||||
|
||||
#include "log.h"
|
||||
#include "saul_reg.h"
|
||||
|
||||
#include "si70xx_params.h"
|
||||
#include "si70xx.h"
|
||||
|
||||
/**
|
||||
* @brief Define the number of configured sensors
|
||||
*/
|
||||
#define SI70XX_NUMOF (sizeof(si70xx_params) / sizeof(si70xx_params[0]))
|
||||
|
||||
/**
|
||||
* @brief Allocation of memory for device descriptors
|
||||
*/
|
||||
static si70xx_t si70xx_devs[SI70XX_NUMOF];
|
||||
|
||||
/**
|
||||
* @brief Memory for the SAUL registry entries
|
||||
*/
|
||||
static saul_reg_t saul_entries[SI70XX_NUMOF * 2];
|
||||
|
||||
/**
|
||||
* @brief Reference the driver structs.
|
||||
* @{
|
||||
*/
|
||||
extern const saul_driver_t si70xx_temperature_saul_driver;
|
||||
extern const saul_driver_t si70xx_relative_humidity_saul_driver;
|
||||
/** @} */
|
||||
|
||||
void auto_init_si70xx(void)
|
||||
{
|
||||
for (int i = 0; i < SI70XX_NUMOF; i++) {
|
||||
int res = si70xx_init(&si70xx_devs[i],
|
||||
si70xx_params[i].i2c_dev,
|
||||
si70xx_params[i].address);
|
||||
if (res < 0) {
|
||||
LOG_ERROR("Unable to initialize BMP180 sensor #%i\n", i);
|
||||
}
|
||||
else {
|
||||
/* temperature */
|
||||
saul_entries[i * 2].dev = &si70xx_devs[i];
|
||||
saul_entries[i * 2].name = si70xx_saul_reg_info[i].name;
|
||||
saul_entries[i * 2].driver = &si70xx_temperature_saul_driver;
|
||||
|
||||
/* relative humidity */
|
||||
saul_entries[(i * 2) + 1].dev = &si70xx_devs[i];
|
||||
saul_entries[(i * 2) + 1].name = si70xx_saul_reg_info[i +1].name;
|
||||
saul_entries[(i * 2) + 1].driver = \
|
||||
&si70xx_relative_humidity_saul_driver;
|
||||
|
||||
saul_reg_add(&saul_entries[i * 2]);
|
||||
saul_reg_add(&saul_entries[(i * 2) + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
typedef int dont_be_pedantic;
|
||||
#endif /* MODULE_SI70XX */
|
@ -1,9 +1,6 @@
|
||||
APPLICATION = driver_si70xx
|
||||
include ../Makefile.tests_common
|
||||
|
||||
FEATURES_REQUIRED += periph_gpio
|
||||
FEATURES_REQUIRED += periph_i2c
|
||||
|
||||
USEMODULE += si70xx
|
||||
USEMODULE += xtimer
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user