You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.9 KiB
76 lines
1.9 KiB
/* |
|
* Copyright (C) 2017 Inria |
|
* |
|
* 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 drivers_veml6070 |
|
* @{ |
|
* |
|
* @file |
|
* @brief Device driver implementation for the VEML6070 UV sensor. |
|
* |
|
* @author Alexandre Abadie <alexandre.abadie@inria.fr> |
|
* |
|
* @} |
|
*/ |
|
|
|
#include <math.h> |
|
|
|
#include "log.h" |
|
#include "veml6070.h" |
|
#include "veml6070_params.h" |
|
#include "periph/i2c.h" |
|
#include "xtimer.h" |
|
|
|
#define ENABLE_DEBUG (0) |
|
#include "debug.h" |
|
|
|
#define VEML6070_ADDRH (0x39) |
|
#define VEML6070_ADDRL (0x38) |
|
|
|
/*---------------------------------------------------------------------------* |
|
* VEML6070 Core API * |
|
*---------------------------------------------------------------------------*/ |
|
|
|
int veml6070_init(veml6070_t *dev, const veml6070_params_t * params) |
|
{ |
|
dev->params = *params; |
|
|
|
/* Initialize I2C interface */ |
|
if (i2c_init_master(dev->params.i2c_dev, I2C_SPEED_NORMAL)) { |
|
DEBUG("[Error] I2C device not enabled\n"); |
|
return -VEML6070_ERR_I2C; |
|
} |
|
|
|
/* Acquire exclusive access */ |
|
i2c_acquire(dev->params.i2c_dev); |
|
|
|
i2c_write_byte(dev->params.i2c_dev, VEML6070_ADDRL, |
|
(uint8_t)(dev->params.itime << 2) | 0x02); |
|
|
|
/* Release I2C device */ |
|
i2c_release(dev->params.i2c_dev); |
|
|
|
return VEML6070_OK; |
|
} |
|
|
|
uint16_t veml6070_read_uv(veml6070_t *dev) |
|
{ |
|
/* Acquire exclusive access */ |
|
i2c_acquire(dev->params.i2c_dev); |
|
|
|
uint8_t buffer[2]; |
|
i2c_read_byte(dev->params.i2c_dev, VEML6070_ADDRL, &buffer[0]); |
|
i2c_read_byte(dev->params.i2c_dev, VEML6070_ADDRH, &buffer[1]); |
|
|
|
uint16_t uv = (uint16_t)(buffer[1] << 8) | buffer[0]; |
|
|
|
/* Release I2C device */ |
|
i2c_release(dev->params.i2c_dev); |
|
|
|
return uv; |
|
}
|
|
|