Initial commit, code based on LPC1224 support and LPC812-MAX CMSIS-DAP interface...
[lpc11u3x] / include / extdrv / tmp101_temp_sensor.h
1 /****************************************************************************
2  *   extdrv/temp.h
3  *
4  *
5  * Copyright 2012 Nathael Pajani <nathael.pajani@ed3l.fr>
6  *
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  *
21  *************************************************************************** */
23 #ifndef EXTDRV_TEMP_H
24 #define EXTDRV_TEMP_H
26 #include <stdint.h>
29 /***************************************************************************** */
30 /*          Support for TMP101 temperature sensors from Texas Instrument       */
31 /***************************************************************************** */
32 /* This driver is made for the TMP101 version of the chip, though there's few
33  * diferences between the TMP100 and TMP101 version.
34  * This driver does not handle the SMBus Alert command.
35  */
38 /* Faulty mesures required to trigger alert */
39 #define TMP_FAULT_ONE       ((0x00 & 0x03) << 3)
40 #define TMP_FAULT_TWO       ((0x01 & 0x03) << 3)
41 #define TMP_FAULT_FOUR      ((0x02 & 0x03) << 3)
42 #define TMP_FAULT_SIX       ((0x03 & 0x03) << 3)
44 /* Temp mesurement resolution bits */            /* conversion time */
45 #define TMP_RES_NINE_BITS   ((0x00 & 0x03) << 5)   /*  40ms */
46 #define TMP_RES_TEN_BITS    ((0x01 & 0x03) << 5)   /*  80ms */
47 #define TMP_RES_ELEVEN_BITS ((0x02 & 0x03) << 5)   /* 160ms */
48 #define TMP_RES_TWELVE_BITS ((0x03 & 0x03) << 5)   /* 320ms */
51 /* TMP101 sensor instance data.
52  * Use one of this for each sensor you want to access.
53  * - addr is the sensor address on most significant bits.
54  * - last_accessed_register is used to keep track of the last register accessed to
55  * prevent sending the pointer register again if we want to read the same register again.
56  * - resolution is one of the above resolution defined values.
57  */
58 struct tmp101_sensor_config {
59         uint8_t addr;
60         uint8_t probe_ok;
61         uint8_t actual_config;
62         int last_accessed_register;
63         uint32_t resolution;
64 };
67 /* Check the sensor presence, return 1 if found
68  * This is a basic check, it could be anything with the same address ...
69  * addr: the sensor address on most significant bits.
70  */
71 int tmp101_probe_sensor(struct tmp101_sensor_config* conf);
74 /* Convert raw temperature data (expressed as signed value of 16 times the
75  * actual temperature in the twelve higher bits of a sixteen bits wide value)
76  * into a decimal interger value of ten times the actual temperature.
77  * The value returned is thus in tenth of degrees centigrade.
78  */
79 int tmp101_convert_to_deci_degrees(uint16_t raw);
82 /* Temp Read
83  * Performs a non-blocking read of the temperature from the sensor.
84  * addr: the sensor address on most significant bits.
85  * 'raw' and 'deci_degrees': integer addresses for conversion result, may be NULL.
86  * Return value(s):
87  *   Upon successfull completion, returns 0 and the temperature read is placed in the
88  *   provided integer(s). On error, returns a negative integer equivalent to errors from
89  *   glibc.
90  *   -EBADFD : I2C not initialized
91  *   -EBUSY : Device or ressource Busy or Arbitration lost
92  *   -EINVAL : Invalid argument (buf)
93  *   -ENODEV : No such device
94  *   -EREMOTEIO : Device did not acknowledge : Any device present ?
95  *   -EIO : Bad one: Illegal start or stop, or illegal state in i2c state machine
96  */
97 int tmp101_sensor_read(struct tmp101_sensor_config* conf, uint16_t* raw, int* deci_degrees);
100 /* Sensor config
101  * Performs default configuration of the temperature sensor.
102  * The sensor is thus placed in shutdown mode, the thermostat is in interrupt mode,
103  * and the polarity is set to active high.
104  * The conversion resolution is set to the provided "resolution".
105  * addr: the sensor address on most significant bits.
106  * Return value:
107  *   Upon successfull completion, returns 0. On error, returns a negative integer
108  *   equivalent to errors from glibc.
109  *   -EBADFD : I2C not initialized
110  *   -EBUSY : Device or ressource Busy or Arbitration lost
111  *   -EINVAL : Invalid argument (buf)
112  *   -ENODEV : No such device
113  *   -EREMOTEIO : Device did not acknowledge : Any device present ?
114  *   -EIO : Bad one: Illegal start or stop, or illegal state in i2c state machine
115  */
116 int tmp101_sensor_config(struct tmp101_sensor_config* conf);
118 /* Start a conversion when the sensor is in shutdown mode.
119  * addr : the sensor address on most significant bits.
120  */
121 int tmp101_sensor_start_conversion(struct tmp101_sensor_config* conf);
124 #endif /* EXTDRV_TEMP_H */