User | Revision | Line number | New contents of line |
mcm |
2:853301624d95
|
1
|
/**
|
mcm |
2:853301624d95
|
2
|
* @brief bme280_defs.h
|
mcm |
2:853301624d95
|
3
|
* @details Combined humidity and pressure sensor.
|
mcm |
2:853301624d95
|
4
|
* Header file.
|
mcm |
2:853301624d95
|
5
|
*
|
mcm |
2:853301624d95
|
6
|
*
|
mcm |
2:853301624d95
|
7
|
* @return N/A
|
mcm |
2:853301624d95
|
8
|
*
|
mcm |
2:853301624d95
|
9
|
* @author Manuel Caballero
|
mcm |
2:853301624d95
|
10
|
* @date 03/September/2019
|
mcm |
2:853301624d95
|
11
|
* @version 03/September/2019 The ORIGIN
|
mcm |
2:853301624d95
|
12
|
* @pre This is just a port from Bosh driver to mBed ( c++ )
|
mcm |
2:853301624d95
|
13
|
* @warning N/A
|
mcm |
2:853301624d95
|
14
|
* @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
|
mcm |
2:853301624d95
|
15
|
*/
|
mcm |
2:853301624d95
|
16
|
/**
|
mcm |
2:853301624d95
|
17
|
* Copyright (C) 2018 - 2019 Bosch Sensortec GmbH
|
mcm |
2:853301624d95
|
18
|
*
|
mcm |
2:853301624d95
|
19
|
* Redistribution and use in source and binary forms, with or without
|
mcm |
2:853301624d95
|
20
|
* modification, are permitted provided that the following conditions are met:
|
mcm |
2:853301624d95
|
21
|
*
|
mcm |
2:853301624d95
|
22
|
* Redistributions of source code must retain the above copyright
|
mcm |
2:853301624d95
|
23
|
* notice, this list of conditions and the following disclaimer.
|
mcm |
2:853301624d95
|
24
|
*
|
mcm |
2:853301624d95
|
25
|
* Redistributions in binary form must reproduce the above copyright
|
mcm |
2:853301624d95
|
26
|
* notice, this list of conditions and the following disclaimer in the
|
mcm |
2:853301624d95
|
27
|
* documentation and/or other materials provided with the distribution.
|
mcm |
2:853301624d95
|
28
|
*
|
mcm |
2:853301624d95
|
29
|
* Neither the name of the copyright holder nor the names of the
|
mcm |
2:853301624d95
|
30
|
* contributors may be used to endorse or promote products derived from
|
mcm |
2:853301624d95
|
31
|
* this software without specific prior written permission.
|
mcm |
2:853301624d95
|
32
|
*
|
mcm |
2:853301624d95
|
33
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
mcm |
2:853301624d95
|
34
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
mcm |
2:853301624d95
|
35
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
mcm |
2:853301624d95
|
36
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
mcm |
2:853301624d95
|
37
|
* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
|
mcm |
2:853301624d95
|
38
|
* OR CONTRIBUTORS BE LIABLE FOR ANY
|
mcm |
2:853301624d95
|
39
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
mcm |
2:853301624d95
|
40
|
* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO,
|
mcm |
2:853301624d95
|
41
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
mcm |
2:853301624d95
|
42
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
mcm |
2:853301624d95
|
43
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
mcm |
2:853301624d95
|
44
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
mcm |
2:853301624d95
|
45
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
mcm |
2:853301624d95
|
46
|
* ANY WAY OUT OF THE USE OF THIS
|
mcm |
2:853301624d95
|
47
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
|
mcm |
2:853301624d95
|
48
|
*
|
mcm |
2:853301624d95
|
49
|
* The information provided is believed to be accurate and reliable.
|
mcm |
2:853301624d95
|
50
|
* The copyright holder assumes no responsibility
|
mcm |
2:853301624d95
|
51
|
* for the consequences of use
|
mcm |
2:853301624d95
|
52
|
* of such information nor for any infringement of patents or
|
mcm |
2:853301624d95
|
53
|
* other rights of third parties which may result from its use.
|
mcm |
2:853301624d95
|
54
|
* No license is granted by implication or otherwise under any patent or
|
mcm |
2:853301624d95
|
55
|
* patent rights of the copyright holder.
|
mcm |
2:853301624d95
|
56
|
*
|
mcm |
2:853301624d95
|
57
|
* @file bme280_defs.h
|
mcm |
2:853301624d95
|
58
|
* @date 08 Mar 2019
|
mcm |
2:853301624d95
|
59
|
* @version 3.3.6
|
mcm |
2:853301624d95
|
60
|
* @brief
|
mcm |
2:853301624d95
|
61
|
*
|
mcm |
2:853301624d95
|
62
|
*/
|
mcm |
2:853301624d95
|
63
|
|
mcm |
2:853301624d95
|
64
|
/*! @file bme280_defs.h
|
mcm |
2:853301624d95
|
65
|
* @brief Sensor driver for BME280 sensor
|
mcm |
2:853301624d95
|
66
|
*/
|
mcm |
2:853301624d95
|
67
|
|
mcm |
2:853301624d95
|
68
|
/*!
|
mcm |
2:853301624d95
|
69
|
* @defgroup BME280 SENSOR API
|
mcm |
2:853301624d95
|
70
|
* @brief
|
mcm |
2:853301624d95
|
71
|
*/
|
mcm |
2:853301624d95
|
72
|
#ifndef BME280_DEFS_H_
|
mcm |
2:853301624d95
|
73
|
#define BME280_DEFS_H_
|
mcm |
2:853301624d95
|
74
|
|
mcm |
2:853301624d95
|
75
|
/********************************************************/
|
mcm |
2:853301624d95
|
76
|
/* header includes */
|
mcm |
2:853301624d95
|
77
|
#ifdef __KERNEL__
|
mcm |
2:853301624d95
|
78
|
#include <linux/types.h>
|
mcm |
2:853301624d95
|
79
|
#include <linux/kernel.h>
|
mcm |
2:853301624d95
|
80
|
#else
|
mcm |
2:853301624d95
|
81
|
#include <stdint.h>
|
mcm |
2:853301624d95
|
82
|
#include <stddef.h>
|
mcm |
2:853301624d95
|
83
|
#endif
|
mcm |
2:853301624d95
|
84
|
|
mcm |
2:853301624d95
|
85
|
/********************************************************/
|
mcm |
2:853301624d95
|
86
|
/*! @name Common macros */
|
mcm |
2:853301624d95
|
87
|
/********************************************************/
|
mcm |
2:853301624d95
|
88
|
|
mcm |
2:853301624d95
|
89
|
/* [MANUEL] Compatible with mBed
|
mcm |
2:853301624d95
|
90
|
#if !defined(UINT8_C) && !defined(INT8_C)
|
mcm |
2:853301624d95
|
91
|
#define INT8_C(x) S8_C(x)
|
mcm |
2:853301624d95
|
92
|
#define UINT8_C(x) U8_C(x)
|
mcm |
2:853301624d95
|
93
|
#endif
|
mcm |
2:853301624d95
|
94
|
|
mcm |
2:853301624d95
|
95
|
#if !defined(UINT16_C) && !defined(INT16_C)
|
mcm |
2:853301624d95
|
96
|
#define INT16_C(x) S16_C(x)
|
mcm |
2:853301624d95
|
97
|
#define UINT16_C(x) U16_C(x)
|
mcm |
2:853301624d95
|
98
|
#endif
|
mcm |
2:853301624d95
|
99
|
|
mcm |
2:853301624d95
|
100
|
#if !defined(INT32_C) && !defined(UINT32_C)
|
mcm |
2:853301624d95
|
101
|
#define INT32_C(x) S32_C(x)
|
mcm |
2:853301624d95
|
102
|
#define UINT32_C(x) U32_C(x)
|
mcm |
2:853301624d95
|
103
|
#endif
|
mcm |
2:853301624d95
|
104
|
|
mcm |
2:853301624d95
|
105
|
#if !defined(INT64_C) && !defined(UINT64_C)
|
mcm |
2:853301624d95
|
106
|
#define INT64_C(x) S64_C(x)
|
mcm |
2:853301624d95
|
107
|
#define UINT64_C(x) U64_C(x)
|
mcm |
2:853301624d95
|
108
|
#endif
|
mcm |
2:853301624d95
|
109
|
*/
|
mcm |
2:853301624d95
|
110
|
|
mcm |
2:853301624d95
|
111
|
#if !defined(UINT8_C) && !defined(INT8_C)
|
mcm |
2:853301624d95
|
112
|
#define INT8_C(x) int8_t(x)
|
mcm |
2:853301624d95
|
113
|
#define UINT8_C(x) uint8_t(x)
|
mcm |
2:853301624d95
|
114
|
#endif
|
mcm |
2:853301624d95
|
115
|
|
mcm |
2:853301624d95
|
116
|
#if !defined(UINT16_C) && !defined(INT16_C)
|
mcm |
2:853301624d95
|
117
|
#define INT16_C(x) int16_t(x)
|
mcm |
2:853301624d95
|
118
|
#define UINT16_C(x) uint16_t(x)
|
mcm |
2:853301624d95
|
119
|
#endif
|
mcm |
2:853301624d95
|
120
|
|
mcm |
2:853301624d95
|
121
|
#if !defined(INT32_C) && !defined(UINT32_C)
|
mcm |
2:853301624d95
|
122
|
#define INT32_C(x) int32_t(x)
|
mcm |
2:853301624d95
|
123
|
#define UINT32_C(x) uint32_t(x)
|
mcm |
2:853301624d95
|
124
|
#endif
|
mcm |
2:853301624d95
|
125
|
|
mcm |
2:853301624d95
|
126
|
#if !defined(INT64_C) && !defined(UINT64_C)
|
mcm |
2:853301624d95
|
127
|
#define INT64_C(x) int64_t(x)
|
mcm |
2:853301624d95
|
128
|
#define UINT64_C(x) uint64_t(x)
|
mcm |
2:853301624d95
|
129
|
#endif
|
mcm |
2:853301624d95
|
130
|
|
mcm |
2:853301624d95
|
131
|
/**@}*/
|
mcm |
2:853301624d95
|
132
|
/**\name C standard macros */
|
mcm |
2:853301624d95
|
133
|
#ifndef NULL
|
mcm |
2:853301624d95
|
134
|
#ifdef __cplusplus
|
mcm |
2:853301624d95
|
135
|
#define NULL 0
|
mcm |
2:853301624d95
|
136
|
#else
|
mcm |
2:853301624d95
|
137
|
#define NULL ((void *) 0)
|
mcm |
2:853301624d95
|
138
|
#endif
|
mcm |
2:853301624d95
|
139
|
#endif
|
mcm |
2:853301624d95
|
140
|
|
mcm |
2:853301624d95
|
141
|
/********************************************************/
|
mcm |
2:853301624d95
|
142
|
|
mcm |
2:853301624d95
|
143
|
#ifndef BME280_FLOAT_ENABLE
|
mcm |
2:853301624d95
|
144
|
|
mcm |
2:853301624d95
|
145
|
/* #define BME280_FLOAT_ENABLE */
|
mcm |
2:853301624d95
|
146
|
#endif
|
mcm |
2:853301624d95
|
147
|
|
mcm |
2:853301624d95
|
148
|
#ifndef BME280_FLOAT_ENABLE
|
mcm |
2:853301624d95
|
149
|
#ifndef BME280_64BIT_ENABLE
|
mcm |
2:853301624d95
|
150
|
#define BME280_64BIT_ENABLE
|
mcm |
2:853301624d95
|
151
|
#endif
|
mcm |
2:853301624d95
|
152
|
#endif
|
mcm |
2:853301624d95
|
153
|
|
mcm |
2:853301624d95
|
154
|
#ifndef TRUE
|
mcm |
2:853301624d95
|
155
|
#define TRUE UINT8_C(1)
|
mcm |
2:853301624d95
|
156
|
#endif
|
mcm |
2:853301624d95
|
157
|
#ifndef FALSE
|
mcm |
2:853301624d95
|
158
|
#define FALSE UINT8_C(0)
|
mcm |
2:853301624d95
|
159
|
#endif
|
mcm |
2:853301624d95
|
160
|
|
mcm |
2:853301624d95
|
161
|
/**\name I2C addresses */
|
mcm |
2:853301624d95
|
162
|
#define BME280_I2C_ADDR_PRIM UINT8_C( ( 0x76 << 1U ) ) // [MANUEL] Address compatible with mBed
|
mcm |
2:853301624d95
|
163
|
#define BME280_I2C_ADDR_SEC UINT8_C( ( 0x77 << 1U ) ) // [MANUEL] Address compatible with mBed
|
mcm |
2:853301624d95
|
164
|
|
mcm |
2:853301624d95
|
165
|
/**\name BME280 chip identifier */
|
mcm |
2:853301624d95
|
166
|
#define BME280_CHIP_ID UINT8_C(0x60)
|
mcm |
2:853301624d95
|
167
|
|
mcm |
2:853301624d95
|
168
|
/**\name Register Address */
|
mcm |
2:853301624d95
|
169
|
#define BME280_CHIP_ID_ADDR UINT8_C(0xD0)
|
mcm |
2:853301624d95
|
170
|
#define BME280_RESET_ADDR UINT8_C(0xE0)
|
mcm |
2:853301624d95
|
171
|
#define BME280_TEMP_PRESS_CALIB_DATA_ADDR UINT8_C(0x88)
|
mcm |
2:853301624d95
|
172
|
#define BME280_HUMIDITY_CALIB_DATA_ADDR UINT8_C(0xE1)
|
mcm |
2:853301624d95
|
173
|
#define BME280_PWR_CTRL_ADDR UINT8_C(0xF4)
|
mcm |
2:853301624d95
|
174
|
#define BME280_CTRL_HUM_ADDR UINT8_C(0xF2)
|
mcm |
2:853301624d95
|
175
|
#define BME280_CTRL_MEAS_ADDR UINT8_C(0xF4)
|
mcm |
2:853301624d95
|
176
|
#define BME280_CONFIG_ADDR UINT8_C(0xF5)
|
mcm |
2:853301624d95
|
177
|
#define BME280_DATA_ADDR UINT8_C(0xF7)
|
mcm |
2:853301624d95
|
178
|
|
mcm |
2:853301624d95
|
179
|
/**\name API success code */
|
mcm |
2:853301624d95
|
180
|
#define BME280_OK INT8_C(0)
|
mcm |
2:853301624d95
|
181
|
|
mcm |
2:853301624d95
|
182
|
/**\name API error codes */
|
mcm |
2:853301624d95
|
183
|
#define BME280_E_NULL_PTR INT8_C(-1)
|
mcm |
2:853301624d95
|
184
|
#define BME280_E_DEV_NOT_FOUND INT8_C(-2)
|
mcm |
2:853301624d95
|
185
|
#define BME280_E_INVALID_LEN INT8_C(-3)
|
mcm |
2:853301624d95
|
186
|
#define BME280_E_COMM_FAIL INT8_C(-4)
|
mcm |
2:853301624d95
|
187
|
#define BME280_E_SLEEP_MODE_FAIL INT8_C(-5)
|
mcm |
2:853301624d95
|
188
|
|
mcm |
2:853301624d95
|
189
|
/**\name API warning codes */
|
mcm |
2:853301624d95
|
190
|
#define BME280_W_INVALID_OSR_MACRO INT8_C(1)
|
mcm |
2:853301624d95
|
191
|
|
mcm |
2:853301624d95
|
192
|
/**\name Macros related to size */
|
mcm |
2:853301624d95
|
193
|
#define BME280_TEMP_PRESS_CALIB_DATA_LEN UINT8_C(26)
|
mcm |
2:853301624d95
|
194
|
#define BME280_HUMIDITY_CALIB_DATA_LEN UINT8_C(7)
|
mcm |
2:853301624d95
|
195
|
#define BME280_P_T_H_DATA_LEN UINT8_C(8)
|
mcm |
2:853301624d95
|
196
|
|
mcm |
2:853301624d95
|
197
|
/**\name Sensor power modes */
|
mcm |
2:853301624d95
|
198
|
#define BME280_SLEEP_MODE UINT8_C(0x00)
|
mcm |
2:853301624d95
|
199
|
#define BME280_FORCED_MODE UINT8_C(0x01)
|
mcm |
2:853301624d95
|
200
|
#define BME280_NORMAL_MODE UINT8_C(0x03)
|
mcm |
2:853301624d95
|
201
|
|
mcm |
2:853301624d95
|
202
|
/**\name Macro to combine two 8 bit data's to form a 16 bit data */
|
mcm |
2:853301624d95
|
203
|
#define BME280_CONCAT_BYTES(msb, lsb) (((uint16_t)msb << 8) | (uint16_t)lsb)
|
mcm |
2:853301624d95
|
204
|
|
mcm |
2:853301624d95
|
205
|
#define BME280_SET_BITS(reg_data, bitname, data) \
|
mcm |
2:853301624d95
|
206
|
((reg_data & ~(bitname##_MSK)) | \
|
mcm |
2:853301624d95
|
207
|
((data << bitname##_POS) & bitname##_MSK))
|
mcm |
2:853301624d95
|
208
|
#define BME280_SET_BITS_POS_0(reg_data, bitname, data) \
|
mcm |
2:853301624d95
|
209
|
((reg_data & ~(bitname##_MSK)) | \
|
mcm |
2:853301624d95
|
210
|
(data & bitname##_MSK))
|
mcm |
2:853301624d95
|
211
|
|
mcm |
2:853301624d95
|
212
|
#define BME280_GET_BITS(reg_data, bitname) ((reg_data & (bitname##_MSK)) >> \
|
mcm |
2:853301624d95
|
213
|
(bitname##_POS))
|
mcm |
2:853301624d95
|
214
|
#define BME280_GET_BITS_POS_0(reg_data, bitname) (reg_data & (bitname##_MSK))
|
mcm |
2:853301624d95
|
215
|
|
mcm |
2:853301624d95
|
216
|
/**\name Macros for bit masking */
|
mcm |
2:853301624d95
|
217
|
#define BME280_SENSOR_MODE_MSK UINT8_C(0x03)
|
mcm |
2:853301624d95
|
218
|
#define BME280_SENSOR_MODE_POS UINT8_C(0x00)
|
mcm |
2:853301624d95
|
219
|
|
mcm |
2:853301624d95
|
220
|
#define BME280_CTRL_HUM_MSK UINT8_C(0x07)
|
mcm |
2:853301624d95
|
221
|
#define BME280_CTRL_HUM_POS UINT8_C(0x00)
|
mcm |
2:853301624d95
|
222
|
|
mcm |
2:853301624d95
|
223
|
#define BME280_CTRL_PRESS_MSK UINT8_C(0x1C)
|
mcm |
2:853301624d95
|
224
|
#define BME280_CTRL_PRESS_POS UINT8_C(0x02)
|
mcm |
2:853301624d95
|
225
|
|
mcm |
2:853301624d95
|
226
|
#define BME280_CTRL_TEMP_MSK UINT8_C(0xE0)
|
mcm |
2:853301624d95
|
227
|
#define BME280_CTRL_TEMP_POS UINT8_C(0x05)
|
mcm |
2:853301624d95
|
228
|
|
mcm |
2:853301624d95
|
229
|
#define BME280_FILTER_MSK UINT8_C(0x1C)
|
mcm |
2:853301624d95
|
230
|
#define BME280_FILTER_POS UINT8_C(0x02)
|
mcm |
2:853301624d95
|
231
|
|
mcm |
2:853301624d95
|
232
|
#define BME280_STANDBY_MSK UINT8_C(0xE0)
|
mcm |
2:853301624d95
|
233
|
#define BME280_STANDBY_POS UINT8_C(0x05)
|
mcm |
2:853301624d95
|
234
|
|
mcm |
2:853301624d95
|
235
|
/**\name Sensor component selection macros
|
mcm |
2:853301624d95
|
236
|
* These values are internal for API implementation. Don't relate this to
|
mcm |
2:853301624d95
|
237
|
* data sheet.
|
mcm |
2:853301624d95
|
238
|
*/
|
mcm |
2:853301624d95
|
239
|
#define BME280_PRESS UINT8_C(1)
|
mcm |
2:853301624d95
|
240
|
#define BME280_TEMP UINT8_C(1 << 1)
|
mcm |
2:853301624d95
|
241
|
#define BME280_HUM UINT8_C(1 << 2)
|
mcm |
2:853301624d95
|
242
|
#define BME280_ALL UINT8_C(0x07)
|
mcm |
2:853301624d95
|
243
|
|
mcm |
2:853301624d95
|
244
|
/**\name Settings selection macros */
|
mcm |
2:853301624d95
|
245
|
#define BME280_OSR_PRESS_SEL UINT8_C(1)
|
mcm |
2:853301624d95
|
246
|
#define BME280_OSR_TEMP_SEL UINT8_C(1 << 1)
|
mcm |
2:853301624d95
|
247
|
#define BME280_OSR_HUM_SEL UINT8_C(1 << 2)
|
mcm |
2:853301624d95
|
248
|
#define BME280_FILTER_SEL UINT8_C(1 << 3)
|
mcm |
2:853301624d95
|
249
|
#define BME280_STANDBY_SEL UINT8_C(1 << 4)
|
mcm |
2:853301624d95
|
250
|
#define BME280_ALL_SETTINGS_SEL UINT8_C(0x1F)
|
mcm |
2:853301624d95
|
251
|
|
mcm |
2:853301624d95
|
252
|
/**\name Oversampling macros */
|
mcm |
2:853301624d95
|
253
|
#define BME280_NO_OVERSAMPLING UINT8_C(0x00)
|
mcm |
2:853301624d95
|
254
|
#define BME280_OVERSAMPLING_1X UINT8_C(0x01)
|
mcm |
2:853301624d95
|
255
|
#define BME280_OVERSAMPLING_2X UINT8_C(0x02)
|
mcm |
2:853301624d95
|
256
|
#define BME280_OVERSAMPLING_4X UINT8_C(0x03)
|
mcm |
2:853301624d95
|
257
|
#define BME280_OVERSAMPLING_8X UINT8_C(0x04)
|
mcm |
2:853301624d95
|
258
|
#define BME280_OVERSAMPLING_16X UINT8_C(0x05)
|
mcm |
2:853301624d95
|
259
|
|
mcm |
2:853301624d95
|
260
|
/**\name Standby duration selection macros */
|
mcm |
2:853301624d95
|
261
|
#define BME280_STANDBY_TIME_0_5_MS (0x00)
|
mcm |
2:853301624d95
|
262
|
#define BME280_STANDBY_TIME_62_5_MS (0x01)
|
mcm |
2:853301624d95
|
263
|
#define BME280_STANDBY_TIME_125_MS (0x02)
|
mcm |
2:853301624d95
|
264
|
#define BME280_STANDBY_TIME_250_MS (0x03)
|
mcm |
2:853301624d95
|
265
|
#define BME280_STANDBY_TIME_500_MS (0x04)
|
mcm |
2:853301624d95
|
266
|
#define BME280_STANDBY_TIME_1000_MS (0x05)
|
mcm |
2:853301624d95
|
267
|
#define BME280_STANDBY_TIME_10_MS (0x06)
|
mcm |
2:853301624d95
|
268
|
#define BME280_STANDBY_TIME_20_MS (0x07)
|
mcm |
2:853301624d95
|
269
|
|
mcm |
2:853301624d95
|
270
|
/**\name Filter coefficient selection macros */
|
mcm |
2:853301624d95
|
271
|
#define BME280_FILTER_COEFF_OFF (0x00)
|
mcm |
2:853301624d95
|
272
|
#define BME280_FILTER_COEFF_2 (0x01)
|
mcm |
2:853301624d95
|
273
|
#define BME280_FILTER_COEFF_4 (0x02)
|
mcm |
2:853301624d95
|
274
|
#define BME280_FILTER_COEFF_8 (0x03)
|
mcm |
2:853301624d95
|
275
|
#define BME280_FILTER_COEFF_16 (0x04)
|
mcm |
2:853301624d95
|
276
|
|
mcm |
2:853301624d95
|
277
|
/*!
|
mcm |
2:853301624d95
|
278
|
* @brief Interface selection Enums
|
mcm |
2:853301624d95
|
279
|
*/
|
mcm |
2:853301624d95
|
280
|
enum bme280_intf {
|
mcm |
2:853301624d95
|
281
|
/*! SPI interface */
|
mcm |
2:853301624d95
|
282
|
BME280_SPI_INTF,
|
mcm |
2:853301624d95
|
283
|
|
mcm |
2:853301624d95
|
284
|
/*! I2C interface */
|
mcm |
2:853301624d95
|
285
|
BME280_I2C_INTF
|
mcm |
2:853301624d95
|
286
|
};
|
mcm |
2:853301624d95
|
287
|
|
mcm |
2:853301624d95
|
288
|
/*!
|
mcm |
2:853301624d95
|
289
|
* @brief Type definitions
|
mcm |
2:853301624d95
|
290
|
*/
|
mcm |
2:853301624d95
|
291
|
typedef int8_t (*bme280_com_fptr_t)(uint8_t dev_id, uint8_t reg_addr, uint8_t *data, uint16_t len);
|
mcm |
2:853301624d95
|
292
|
typedef void (*bme280_delay_fptr_t)(uint32_t period);
|
mcm |
2:853301624d95
|
293
|
|
mcm |
2:853301624d95
|
294
|
/*!
|
mcm |
2:853301624d95
|
295
|
* @brief Calibration data
|
mcm |
2:853301624d95
|
296
|
*/
|
mcm |
2:853301624d95
|
297
|
struct bme280_calib_data
|
mcm |
2:853301624d95
|
298
|
{
|
mcm |
2:853301624d95
|
299
|
/**
|
mcm |
2:853301624d95
|
300
|
* @ Trim Variables
|
mcm |
2:853301624d95
|
301
|
*/
|
mcm |
2:853301624d95
|
302
|
|
mcm |
2:853301624d95
|
303
|
/**@{*/
|
mcm |
2:853301624d95
|
304
|
uint16_t dig_T1;
|
mcm |
2:853301624d95
|
305
|
int16_t dig_T2;
|
mcm |
2:853301624d95
|
306
|
int16_t dig_T3;
|
mcm |
2:853301624d95
|
307
|
uint16_t dig_P1;
|
mcm |
2:853301624d95
|
308
|
int16_t dig_P2;
|
mcm |
2:853301624d95
|
309
|
int16_t dig_P3;
|
mcm |
2:853301624d95
|
310
|
int16_t dig_P4;
|
mcm |
2:853301624d95
|
311
|
int16_t dig_P5;
|
mcm |
2:853301624d95
|
312
|
int16_t dig_P6;
|
mcm |
2:853301624d95
|
313
|
int16_t dig_P7;
|
mcm |
2:853301624d95
|
314
|
int16_t dig_P8;
|
mcm |
2:853301624d95
|
315
|
int16_t dig_P9;
|
mcm |
2:853301624d95
|
316
|
uint8_t dig_H1;
|
mcm |
2:853301624d95
|
317
|
int16_t dig_H2;
|
mcm |
2:853301624d95
|
318
|
uint8_t dig_H3;
|
mcm |
2:853301624d95
|
319
|
int16_t dig_H4;
|
mcm |
2:853301624d95
|
320
|
int16_t dig_H5;
|
mcm |
2:853301624d95
|
321
|
int8_t dig_H6;
|
mcm |
2:853301624d95
|
322
|
int32_t t_fine;
|
mcm |
2:853301624d95
|
323
|
|
mcm |
2:853301624d95
|
324
|
/**@}*/
|
mcm |
2:853301624d95
|
325
|
};
|
mcm |
2:853301624d95
|
326
|
|
mcm |
2:853301624d95
|
327
|
/*!
|
mcm |
2:853301624d95
|
328
|
* @brief bme280 sensor structure which comprises of temperature, pressure and
|
mcm |
2:853301624d95
|
329
|
* humidity data
|
mcm |
2:853301624d95
|
330
|
*/
|
mcm |
2:853301624d95
|
331
|
#ifdef BME280_FLOAT_ENABLE
|
mcm |
2:853301624d95
|
332
|
struct bme280_data
|
mcm |
2:853301624d95
|
333
|
{
|
mcm |
2:853301624d95
|
334
|
/*! Compensated pressure */
|
mcm |
2:853301624d95
|
335
|
double pressure;
|
mcm |
2:853301624d95
|
336
|
|
mcm |
2:853301624d95
|
337
|
/*! Compensated temperature */
|
mcm |
2:853301624d95
|
338
|
double temperature;
|
mcm |
2:853301624d95
|
339
|
|
mcm |
2:853301624d95
|
340
|
/*! Compensated humidity */
|
mcm |
2:853301624d95
|
341
|
double humidity;
|
mcm |
2:853301624d95
|
342
|
};
|
mcm |
2:853301624d95
|
343
|
#else
|
mcm |
2:853301624d95
|
344
|
struct bme280_data
|
mcm |
2:853301624d95
|
345
|
{
|
mcm |
2:853301624d95
|
346
|
/*! Compensated pressure */
|
mcm |
2:853301624d95
|
347
|
uint32_t pressure;
|
mcm |
2:853301624d95
|
348
|
|
mcm |
2:853301624d95
|
349
|
/*! Compensated temperature */
|
mcm |
2:853301624d95
|
350
|
int32_t temperature;
|
mcm |
2:853301624d95
|
351
|
|
mcm |
2:853301624d95
|
352
|
/*! Compensated humidity */
|
mcm |
2:853301624d95
|
353
|
uint32_t humidity;
|
mcm |
2:853301624d95
|
354
|
};
|
mcm |
2:853301624d95
|
355
|
#endif /* BME280_USE_FLOATING_POINT */
|
mcm |
2:853301624d95
|
356
|
|
mcm |
2:853301624d95
|
357
|
/*!
|
mcm |
2:853301624d95
|
358
|
* @brief bme280 sensor structure which comprises of uncompensated temperature,
|
mcm |
2:853301624d95
|
359
|
* pressure and humidity data
|
mcm |
2:853301624d95
|
360
|
*/
|
mcm |
2:853301624d95
|
361
|
struct bme280_uncomp_data
|
mcm |
2:853301624d95
|
362
|
{
|
mcm |
2:853301624d95
|
363
|
/*! un-compensated pressure */
|
mcm |
2:853301624d95
|
364
|
uint32_t pressure;
|
mcm |
2:853301624d95
|
365
|
|
mcm |
2:853301624d95
|
366
|
/*! un-compensated temperature */
|
mcm |
2:853301624d95
|
367
|
uint32_t temperature;
|
mcm |
2:853301624d95
|
368
|
|
mcm |
2:853301624d95
|
369
|
/*! un-compensated humidity */
|
mcm |
2:853301624d95
|
370
|
uint32_t humidity;
|
mcm |
2:853301624d95
|
371
|
};
|
mcm |
2:853301624d95
|
372
|
|
mcm |
2:853301624d95
|
373
|
/*!
|
mcm |
2:853301624d95
|
374
|
* @brief bme280 sensor settings structure which comprises of mode,
|
mcm |
2:853301624d95
|
375
|
* oversampling and filter settings.
|
mcm |
2:853301624d95
|
376
|
*/
|
mcm |
2:853301624d95
|
377
|
struct bme280_settings
|
mcm |
2:853301624d95
|
378
|
{
|
mcm |
2:853301624d95
|
379
|
/*! pressure oversampling */
|
mcm |
2:853301624d95
|
380
|
uint8_t osr_p;
|
mcm |
2:853301624d95
|
381
|
|
mcm |
2:853301624d95
|
382
|
/*! temperature oversampling */
|
mcm |
2:853301624d95
|
383
|
uint8_t osr_t;
|
mcm |
2:853301624d95
|
384
|
|
mcm |
2:853301624d95
|
385
|
/*! humidity oversampling */
|
mcm |
2:853301624d95
|
386
|
uint8_t osr_h;
|
mcm |
2:853301624d95
|
387
|
|
mcm |
2:853301624d95
|
388
|
/*! filter coefficient */
|
mcm |
2:853301624d95
|
389
|
uint8_t filter;
|
mcm |
2:853301624d95
|
390
|
|
mcm |
2:853301624d95
|
391
|
/*! standby time */
|
mcm |
2:853301624d95
|
392
|
uint8_t standby_time;
|
mcm |
2:853301624d95
|
393
|
};
|
mcm |
2:853301624d95
|
394
|
|
mcm |
2:853301624d95
|
395
|
/*!
|
mcm |
2:853301624d95
|
396
|
* @brief bme280 device structure
|
mcm |
2:853301624d95
|
397
|
*/
|
mcm |
2:853301624d95
|
398
|
struct bme280_dev
|
mcm |
2:853301624d95
|
399
|
{
|
mcm |
2:853301624d95
|
400
|
/*! Chip Id */
|
mcm |
2:853301624d95
|
401
|
uint8_t chip_id;
|
mcm |
2:853301624d95
|
402
|
|
mcm |
2:853301624d95
|
403
|
/*! Device Id */
|
mcm |
2:853301624d95
|
404
|
uint8_t dev_id;
|
mcm |
2:853301624d95
|
405
|
|
mcm |
2:853301624d95
|
406
|
/*! SPI/I2C interface */
|
mcm |
2:853301624d95
|
407
|
enum bme280_intf intf;
|
mcm |
2:853301624d95
|
408
|
|
mcm |
2:853301624d95
|
409
|
/*! Read function pointer */
|
mcm |
2:853301624d95
|
410
|
bme280_com_fptr_t read;
|
mcm |
2:853301624d95
|
411
|
|
mcm |
2:853301624d95
|
412
|
/*! Write function pointer */
|
mcm |
2:853301624d95
|
413
|
bme280_com_fptr_t write;
|
mcm |
2:853301624d95
|
414
|
|
mcm |
2:853301624d95
|
415
|
/*! Delay function pointer */
|
mcm |
2:853301624d95
|
416
|
bme280_delay_fptr_t delay_ms;
|
mcm |
2:853301624d95
|
417
|
|
mcm |
2:853301624d95
|
418
|
/*! Trim data */
|
mcm |
2:853301624d95
|
419
|
struct bme280_calib_data calib_data;
|
mcm |
2:853301624d95
|
420
|
|
mcm |
2:853301624d95
|
421
|
/*! Sensor settings */
|
mcm |
2:853301624d95
|
422
|
struct bme280_settings settings;
|
mcm |
2:853301624d95
|
423
|
};
|
mcm |
2:853301624d95
|
424
|
|
mcm |
2:853301624d95
|
425
|
#endif /* BME280_DEFS_H_ */
|
mcm |
2:853301624d95
|
426
|
/** @}*/ |