VEML6070 I2C UV sensor driver
[lpc82x] / include / extdrv / veml6070_uv_sensor.h
1 /****************************************************************************
2  *   extdrv/veml6070_uv_sensor.h
3  *
4  * VEML6070 I2C UV sensor driver
5  *
6  * Copyright 2016 Nathael Pajani <nathael.pajani@ed3l.fr>
7  *
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  *************************************************************************** */
25 #include "lib/stdint.h"
29 /* VEML6070 sensor instance data.
30  * Note that the veml6070 sensor adress cannot be changed.
31  */
32 struct veml6070_sensor_config {
33     uint8_t addr;
34         uint8_t bus_num;
35     uint8_t probe_ok;
36     uint8_t actual_config;
37 };
40 /* Defines for command byte */
41 #define VEML6070_ACK               (1 << 5)
42 #define VEML6070_ACK_THD_102       (0)
43 #define VEML6070_ACK_THD_145       (1 << 4)
44 #define VEML6070_NO_ACK            (0)
45 #define VEML6070_INTEG_05T         (0x00 << 2)
46 #define VEML6070_INTEG_1T          (0x01 << 2)
47 #define VEML6070_INTEG_2T          (0x02 << 2)
48 #define VEML6070_INTEG_4T          (0x03 << 2)
49 #define VEML6070_ENABLE            (1 << 0)
52 /* Check the sensor presence, return 1 if foundZ */
53 int veml6070_probe_sensor(struct veml6070_sensor_config* conf);
56 /* UV Read
57  * Performs a read of the uv data from the sensor.
58  * 'uv_raw': integer addresses for conversion result.
59  * Return value(s):
60  *   Upon successfull completion, returns 0 and the luminosity read is placed in the
61  *   provided integer(s). On error, returns a negative integer equivalent to errors from
62  *   glibc.
63  *   -EBADFD : I2C not initialized
64  *   -EBUSY : Device or ressource Busy or Arbitration lost
65  *   -EINVAL : Invalid argument (buf)
66  *   -ENODEV : No such device
67  *   -EREMOTEIO : Device did not acknowledge : Any device present ?
68  *   -EIO : Bad one: Illegal start or stop, or illegal state in i2c state machine
69  */
70 int veml6070_sensor_read(struct veml6070_sensor_config* conf, uint16_t* uv_raw);
73 /* Sensor config
74  * Performs default configuration of the UV sensor.
75  * Return value:
76  *   Upon successfull completion, returns 0. On error, returns a negative integer
77  *   equivalent to errors from glibc.
78  *   -EBADFD : I2C not initialized
79  *   -EBUSY : Device or ressource Busy or Arbitration lost
80  *   -EINVAL : Invalid argument (buf)
81  *   -ENODEV : No such device
82  *   -EREMOTEIO : Device did not acknowledge : Any device present ?
83  *   -EIO : Bad one: Illegal start or stop, or illegal state in i2c state machine
84  */
85 #define CONF_BUF_SIZE 2
86 int veml6070_configure(struct veml6070_sensor_config* conf);