ChibiOS  0.0.0
lps25h.h
Go to the documentation of this file.
1 /*
2  ChibiOS - Copyright (C) 2016..2018 Rocco Marco Guglielmi
3 
4  This file is part of ChibiOS.
5 
6  ChibiOS is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 3 of the License, or
9  (at your option) any later version.
10 
11  ChibiOS is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 */
20 
21 /**
22  * @file lps25h.h
23  * @brief LPS25H MEMS interface module header.
24  *
25  * @addtogroup LPS25H
26  * @ingroup EX_ST
27  * @{
28  */
29 #ifndef _LPS25H_H_
30 #define _LPS25H_H_
31 
32 #include "hal_barometer.h"
33 #include "hal_thermometer.h"
34 
35 /*===========================================================================*/
36 /* Driver constants. */
37 /*===========================================================================*/
38 
39 /**
40  * @name Version identification
41  * @{
42  */
43 /**
44  * @brief LPS25H driver version string.
45  */
46 #define EX_LPS25H_VERSION "1.1.1"
47 
48 /**
49  * @brief LPS25H driver version major number.
50  */
51 #define EX_LPS25H_MAJOR 1
52 
53 /**
54  * @brief LPS25H driver version minor number.
55  */
56 #define EX_LPS25H_MINOR 1
57 
58 /**
59  * @brief LPS25H driver version patch number.
60  */
61 #define EX_LPS25H_PATCH 1
62 /** @} */
63 
64 /**
65  * @brief LPS25H barometer subsystem characteristics.
66  * @note Sensitivity is expressed as hPa/LSB whereas hPa stand for
67  * hectopascal.
68  * @note Bias is expressed as hPa.
69  *
70  * @{
71  */
72 #define LPS25H_BARO_NUMBER_OF_AXES 1U
73 
74 #define LPS25H_BARO_SENS 0.00024414f
75 #define LPS25H_BARO_BIAS 0.0f
76 /** @} */
77 
78 /**
79  * @brief LPS25H thermometer subsystem characteristics.
80  * @note Sensitivity is expressed as °C/LSB.
81  * @note Bias is expressed as °C.
82  *
83  * @{
84  */
85 #define LPS25H_THERMO_NUMBER_OF_AXES 1U
86 
87 #define LPS25H_THERMO_SENS 0.00208333f
88 #define LPS25H_THERMO_BIAS -42.5f
89 /** @} */
90 
91 /**
92  * @name LPS25H communication interfaces related bit masks
93  * @{
94  */
95 #define LPS25H_DI_MASK 0xFF
96 #define LPS25H_DI(n) (1 << n)
97 #define LPS25H_AD_MASK 0x3F
98 #define LPS25H_AD(n) (1 << n)
99 #define LPS25H_MS (1 << 6)
100 #define LPS25H_RW (1 << 7)
101 
102 #define LPS25H_SUB_MS (1 << 7)
103 /** @} */
104 
105 /**
106  * @name LPS25H register addresses
107  * @{
108  */
109 #define LPS25H_AD_REF_P_XL 0x08
110 #define LPS25H_AD_REF_P_L 0x09
111 #define LPS25H_AD_REF_P_H 0x0A
112 #define LPS25H_AD_WHO_AM_I 0x0F
113 #define LPS25H_AD_RES_CONF 0x10
114 #define LPS25H_AD_CTRL_REG1 0x20
115 #define LPS25H_AD_CTRL_REG2 0x21
116 #define LPS25H_AD_CTRL_REG3 0x22
117 #define LPS25H_AD_CTRL_REG4 0x23
118 #define LPS25H_AD_INT_CFG 0x24
119 #define LPS25H_AD_INT_SRC 0x25
120 #define LPS25H_AD_STATUS_REG 0x27
121 #define LPS25H_AD_PRESS_OUT_XL 0x28
122 #define LPS25H_AD_PRESS_OUT_L 0x29
123 #define LPS25H_AD_PRESS_OUT_H 0x2A
124 #define LPS25H_AD_TEMP_OUT_L 0x2B
125 #define LPS25H_AD_TEMP_OUT_H 0x2C
126 #define LPS25H_AD_FIFO_CTRL 0x2E
127 #define LPS25H_AD_FIFO_SRC 0x2F
128 #define LPS25H_AD_THS_P_L 0x30
129 #define LPS25H_AD_THS_P_H 0x31
130 #define LPS25H_AD_RPDS_L 0x39
131 #define LPS25H_AD_RPDS_H 0x3A
132 /** @} */
133 
134 /**
135  * @name LPS25H_CTRL_REG1 register bits definitions
136  * @{
137  */
138 #define LPS25H_CTRL_REG1_MASK 0xFF
139 #define LPS25H_CTRL_REG1_SIM (1 << 0)
140 #define LPS25H_CTRL_REG1_RESET_AZ (1 << 1)
141 #define LPS25H_CTRL_REG1_BDU (1 << 2)
142 #define LPS25H_CTRL_REG1_DIFF_EN (1 << 3)
143 #define LPS25H_CTRL_REG1_ODR0 (1 << 4)
144 #define LPS25H_CTRL_REG1_ODR1 (1 << 5)
145 #define LPS25H_CTRL_REG1_ODR2 (1 << 6)
146 #define LPS25H_CTRL_REG1_PD (1 << 7)
147 /** @} */
148 
149 /**
150  * @name LPS25H_CTRL_REG2 register bits definitions
151  * @{
152  */
153 #define LPS25H_CTRL_REG2_MASK 0xF3
154 #define LPS25H_CTRL_REG2_ONE_SHOT (1 << 0)
155 #define LPS25H_CTRL_REG2_AUTO_ZERO (1 << 1)
156 #define LPS25H_CTRL_REG2_SWRESET (1 << 2)
157 #define LPS25H_CTRL_REG2_FIFO_MEAN_DEC (1 << 4)
158 #define LPS25H_CTRL_REG2_WTM_EN (1 << 5)
159 #define LPS25H_CTRL_REG2_FIFO_EN (1 << 6)
160 #define LPS25H_CTRL_REG2_BOOT (1 << 7)
161 /** @} */
162 
163 /**
164  * @name LPS25H_CTRL_REG3 register bits definitions
165  * @{
166  */
167 #define LPS25H_CTRL_REG3_MASK 0xC3
168 #define LPS25H_CTRL_REG3_INT_S1 (1 << 0)
169 #define LPS25H_CTRL_REG3_INT_S2 (1 << 1)
170 #define LPS25H_CTRL_REG3_PP_OD (1 << 6)
171 #define LPS25H_CTRL_REG3_INT_H_L (1 << 7)
172 /** @} */
173 
174 /**
175  * @name LPS25H_CTRL_REG4 register bits definitions
176  * @{
177  */
178 #define LPS25H_CTRL_REG4_MASK 0x0F
179 #define LPS25H_CTRL_REG4_P1_DRDY (1 << 0)
180 #define LPS25H_CTRL_REG4_P1_OVERRUN (1 << 1)
181 #define LPS25H_CTRL_REG4_P1_WTM (1 << 2)
182 #define LPS25H_CTRL_REG4_P1_EMPTY (1 << 3)
183 /** @} */
184 
185 /**
186  * @name LPS25H_INT1_CFG register bits definitions
187  * @{
188  */
189 #define LPS25H_INT1_CFG_MASK 0x07
190 #define LPS25H_INT1_CFG_PH_E (1 << 0)
191 #define LPS25H_INT1_CFG_PL_E (1 << 1)
192 #define LPS25H_INT1_CFG_LIR (1 << 2)
193 /** @} */
194 
195 /**
196  * @name LPS25H_INT1_SRC register bits definitions
197  * @{
198  */
199 #define LPS25H_INT1_SRC_MASK 0x07
200 #define LPS25H_INT1_SRC_PH (1 << 0)
201 #define LPS25H_INT1_SRC_PL (1 << 1)
202 #define LPS25H_INT1_SRC_IA (1 << 2)
203 /** @} */
204 
205 /*===========================================================================*/
206 /* Driver pre-compile time settings. */
207 /*===========================================================================*/
208 
209 /**
210  * @name Configuration options
211  * @{
212  */
213 /**
214  * @brief LPS25H SPI interface switch.
215  * @details If set to @p TRUE the support for SPI is included.
216  * @note The default is @p FALSE.
217  */
218 #if !defined(LPS25H_USE_SPI) || defined(__DOXYGEN__)
219 #define LPS25H_USE_SPI FALSE
220 #endif
221 
222 /**
223  * @brief LPS25H shared SPI switch.
224  * @details If set to @p TRUE the device acquires SPI bus ownership
225  * on each transaction.
226  * @note The default is @p FALSE. Requires SPI_USE_MUTUAL_EXCLUSION.
227  */
228 #if !defined(LPS25H_SHARED_SPI) || defined(__DOXYGEN__)
229 #define LPS25H_SHARED_SPI FALSE
230 #endif
231 
232 /**
233  * @brief LPS25H I2C interface switch.
234  * @details If set to @p TRUE the support for I2C is included.
235  * @note The default is @p TRUE.
236  */
237 #if !defined(LPS25H_USE_I2C) || defined(__DOXYGEN__)
238 #define LPS25H_USE_I2C TRUE
239 #endif
240 
241 /**
242  * @brief LPS25H shared I2C switch.
243  * @details If set to @p TRUE the device acquires I2C bus ownership
244  * on each transaction.
245  * @note The default is @p FALSE. Requires I2C_USE_MUTUAL_EXCLUSION.
246  */
247 #if !defined(LPS25H_SHARED_I2C) || defined(__DOXYGEN__)
248 #define LPS25H_SHARED_I2C FALSE
249 #endif
250 
251 /**
252  * @brief LPS25H accelerometer subsystem advanced configurations
253  * switch.
254  * @details If set to @p TRUE more configurations are available.
255  * @note The default is @p FALSE.
256  */
257 #if !defined(LPS25H_USE_ADVANCED) || defined(__DOXYGEN__)
258 #define LPS25H_USE_ADVANCED FALSE
259 #endif
260 /** @} */
261 
262 /*===========================================================================*/
263 /* Derived constants and error checks. */
264 /*===========================================================================*/
265 
266 #if !(LPS25H_USE_SPI ^ LPS25H_USE_I2C)
267 #error "LPS25H_USE_SPI and LPS25H_USE_I2C cannot be both true or both false"
268 #endif
269 
270 #if LPS25H_USE_SPI && !HAL_USE_SPI
271 #error "LPS25H_USE_SPI requires HAL_USE_SPI"
272 #endif
273 
274 #if LPS25H_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION
275 #error "LPS25H_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION"
276 #endif
277 
278 #if LPS25H_USE_I2C && !HAL_USE_I2C
279 #error "LPS25H_USE_I2C requires HAL_USE_I2C"
280 #endif
281 
282 #if LPS25H_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION
283 #error "LPS25H_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION"
284 #endif
285 
286 /**
287  * @todo Add support for LPS25H over SPI.
288  */
289 #if LPS25H_USE_SPI
290 #error "LPS25H over SPI still not supported"
291 #endif
292 
293 /*===========================================================================*/
294 /* Driver data structures and types. */
295 /*===========================================================================*/
296 
297 /**
298  * @name LPS25H data structures and types.
299  * @{
300  */
301 /**
302  * @brief Structure representing a LPS25H driver.
303  */
304 typedef struct LPS25HDriver LPS25HDriver;
305 
306 /**
307  * @brief LPS25H slave address
308  */
309 typedef enum {
310  LPS25H_SAD_GND = 0x5C, /**< Slave Address when SA0 is to GND */
311  LPS25H_SAD_VCC = 0x5D /**< Slave Address when SA0 is to VCC */
312 }lps25h_sad_t;
313 
314 /**
315  * @brief LPS25H output data rate and bandwidth.
316  */
317 typedef enum {
318  LPS25H_ODR_ONE_SHOT = 0x00, /**< One shot. */
319  LPS25H_ODR_1HZ = 0x10, /**< Output data rate 1 Hz. */
320  LPS25H_ODR_7HZ = 0x20, /**< Output data rate 7 Hz. */
321  LPS25H_ODR_12P5HZ = 0x30, /**< Output data rate 12.5 Hz. */
322  LPS25H_ODR_25HZ = 0x40 /**< Output data rate 25 Hz. */
323 }lps25h_odr_t;
324 
325 /**
326  * @brief LPS25H pressure resolution.
327  */
328 typedef enum {
329  LPS25H_AVGP_8 = 0x00, /**< Number of internal average is 8. */
330  LPS25H_AVGP_32 = 0x01, /**< Number of internal average is 32. */
331  LPS25H_AVGP_128 = 0x02, /**< Number of internal average is 128. */
332  LPS25H_AVGP_512 = 0x03, /**< Number of internal average is 512. */
334 
335 /**
336  * @brief LPS25H temperature resolution.
337  */
338 typedef enum {
339  LPS25H_AVGT_8 = 0x00, /**< Number of internal average is 8. */
340  LPS25H_AVGT_32 = 0x04, /**< Number of internal average is 32. */
341  LPS25H_AVGT_128 = 0x08, /**< Number of internal average is 128. */
342  LPS25H_AVGT_512 = 0x0C, /**< Number of internal average is 512. */
344 
345 /**
346  * @brief LPS25H block data update.
347  */
348 typedef enum {
349  LPS25H_BDU_CONTINUOUS = 0x00, /**< Block data continuously updated. */
350  LPS25H_BDU_BLOCKED = 0x40 /**< Block data updated after reading. */
351 }lps25h_bdu_t;
352 
353 /**
354  * @brief Driver state machine possible states.
355  */
356 typedef enum {
357  LPS25H_UNINIT = 0, /**< Not initialized. */
358  LPS25H_STOP = 1, /**< Stopped. */
359  LPS25H_READY = 2, /**< Ready. */
361 
362 /**
363  * @brief LPS25H configuration structure.
364  */
365 typedef struct {
366 
367 #if LPS25H_USE_SPI || defined(__DOXYGEN__)
368  /**
369  * @brief SPI driver associated to this LPS25H.
370  */
372  /**
373  * @brief SPI configuration associated to this LPS25H.
374  */
376 #endif /* LPS25H_USE_SPI */
377 #if LPS25H_USE_I2C || defined(__DOXYGEN__)
378  /**
379  * @brief I2C driver associated to this LPS25H.
380  */
382  /**
383  * @brief I2C configuration associated to this LPS25H.
384  */
386  /**
387  * @brief LPS25H slave address
388  */
390 #endif /* LPS25H_USE_I2C */
391  /**
392  * @brief LPS25H barometer subsystem initial sensitivity.
393  */
395  /**
396  * @brief LPS25H barometer subsystem initial bias.
397  */
398  float *barobias;
399  /**
400  * @brief LPS25H thermometer subsystem initial sensitivity.
401  */
403  /**
404  * @brief LPS25H thermometer subsystem initial bias.
405  */
406  float *thermobias;
407  /**
408  * @brief LPS25H output data rate selection.
409  */
411 #if LPS25H_USE_ADVANCED || defined(__DOXYGEN__)
412  /**
413  * @brief LPS25H block data update.
414  */
416  /**
417  * @brief LPS25H barometer subsystem resolution.
418  */
420  /**
421  * @brief LPS25H thermometer subsystem resolution.
422  */
424 #endif
425 } LPS25HConfig;
426 
427 /**
428  * @brief @p LPS25H specific methods.
429  * @note No methods so far, just a common ancestor interface.
430  */
431 #define _lps25h_methods_alone
432 
433 /**
434  * @brief @p LPS25H specific methods with inherited ones.
435  */
436 #define _lps25h_methods \
437  _base_object_methods \
438  _lps25h_methods_alone
439 
440 /**
441  * @extends BaseObjectVMT
442  *
443  * @brief @p LPS25H virtual methods table.
444  */
445 struct LPS25HVMT {
447 };
448 
449 /**
450  * @brief @p LPS25HDriver specific data.
451  */
452 #define _lps25h_data \
453  /* Driver state.*/ \
454  lps25h_state_t state; \
455  /* Current configuration data.*/ \
456  const LPS25HConfig *config; \
457  /* Barometer subsystem axes number.*/ \
458  size_t baroaxes; \
459  /* Barometer subsystem current sensitivity.*/ \
460  float barosensitivity; \
461  /* Barometer subsystem current bias .*/ \
462  float barobias; \
463  /* Thermometer subsystem axes number.*/ \
464  size_t thermoaxes; \
465  /* Thermometer subsystem current sensitivity.*/ \
466  float thermosensitivity; \
467  /* Thermometer subsystem current bias.*/ \
468  float thermobias;
469 
470 /**
471  * @brief LPS25H 2-axis barometer/thermometer class.
472  */
473 struct LPS25HDriver {
474  /** @brief Virtual Methods Table.*/
475  const struct LPS25HVMT *vmt;
476  /** @brief Base barometer interface.*/
478  /** @brief Base thermometer interface.*/
481 };
482 /** @} */
483 
484 /*===========================================================================*/
485 /* Driver macros. */
486 /*===========================================================================*/
487 
488 /**
489  * @brief Return the number of axes of the BaseBarometer.
490  *
491  * @param[in] devp pointer to @p LPS25HDriver.
492  *
493  * @return the number of axes.
494  *
495  * @api
496  */
497 #define lps25hBarometerGetAxesNumber(devp) \
498  barometerGetAxesNumber(&((devp)->baro_if))
499 
500 /**
501  * @brief Retrieves raw data from the BaseBarometer.
502  * @note This data is retrieved from MEMS register without any algebraical
503  * manipulation.
504  * @note The axes array must be at least the same size of the
505  * BaseBarometer axes number.
506  *
507  * @param[in] devp pointer to @p LPS25HDriver.
508  * @param[out] axes a buffer which would be filled with raw data.
509  *
510  * @return The operation status.
511  * @retval MSG_OK if the function succeeded.
512  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
513  * be retrieved using @p i2cGetErrors().
514  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
515  *
516  * @api
517  */
518 #define lps25hBarometerReadRaw(devp, axes) \
519  barometerReadRaw(&((devp)->baro_if), axes)
520 
521 /**
522  * @brief Retrieves cooked data from the BaseBarometer.
523  * @note This data is manipulated according to the formula
524  * cooked = (raw * sensitivity) - bias.
525  * @note Final data is expressed as hPa.
526  * @note The axes array must be at least the same size of the
527  * BaseBarometer axes number.
528  *
529  * @param[in] devp pointer to @p LPS25HDriver.
530  * @param[out] axes a buffer which would be filled with cooked data.
531  *
532  * @return The operation status.
533  * @retval MSG_OK if the function succeeded.
534  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
535  * be retrieved using @p i2cGetErrors().
536  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
537  *
538  * @api
539  */
540 #define lps25hBarometerReadCooked(devp, axes) \
541  barometerReadCooked(&((devp)->baro_if), axes)
542 
543 /**
544  * @brief Set bias values for the BaseBarometer.
545  * @note Bias must be expressed as hPa.
546  * @note The bias buffer must be at least the same size of the
547  * BaseBarometer axes number.
548  *
549  * @param[in] devp pointer to @p LPS25HDriver.
550  * @param[in] bp a buffer which contains biases.
551  *
552  * @return The operation status.
553  * @retval MSG_OK if the function succeeded.
554  *
555  * @api
556  */
557 #define lps25hBarometerSetBias(devp, bp) \
558  barometerSetBias(&((devp)->baro_if), bp)
559 
560 /**
561  * @brief Reset bias values for the BaseBarometer.
562  * @note Default biases value are obtained from device datasheet when
563  * available otherwise they are considered zero.
564  *
565  * @param[in] devp pointer to @p LPS25HDriver.
566  *
567  * @return The operation status.
568  * @retval MSG_OK if the function succeeded.
569  *
570  * @api
571  */
572 #define lps25hBarometerResetBias(devp) \
573  barometerResetBias(&((devp)->baro_if))
574 
575 /**
576  * @brief Set sensitivity values for the BaseBarometer.
577  * @note Sensitivity must be expressed as hPa/LSB.
578  * @note The sensitivity buffer must be at least the same size of the
579  * BaseBarometer axes number.
580  *
581  * @param[in] devp pointer to @p LPS25HDriver.
582  * @param[in] sp a buffer which contains sensitivities.
583  *
584  * @return The operation status.
585  * @retval MSG_OK if the function succeeded.
586  *
587  * @api
588  */
589 #define lps25hBarometerSetSensitivity(devp, sp) \
590  barometerSetSensitivity(&((devp)->baro_if), sp)
591 
592 /**
593  * @brief Reset sensitivity values for the BaseBarometer.
594  * @note Default sensitivities value are obtained from device datasheet.
595  *
596  * @param[in] devp pointer to @p LPS25HDriver.
597  *
598  * @return The operation status.
599  * @retval MSG_OK if the function succeeded.
600  *
601  * @api
602  */
603 #define lps25hBarometerResetSensitivity(devp) \
604  barometerResetSensitivity(&((devp)->baro_if))
605 
606 /**
607  * @brief Return the number of axes of the BaseThermometer.
608  *
609  * @param[in] devp pointer to @p LPS25HDriver.
610  *
611  * @return the number of axes.
612  *
613  * @api
614  */
615 #define lps25hThermometerGetAxesNumber(devp) \
616  thermometerGetAxesNumber(&((devp)->thermo_if))
617 
618 /**
619  * @brief Retrieves raw data from the BaseThermometer.
620  * @note This data is retrieved from MEMS register without any algebraical
621  * manipulation.
622  * @note The axes array must be at least the same size of the
623  * BaseThermometer axes number.
624  *
625  * @param[in] devp pointer to @p LPS25HDriver.
626  * @param[out] axes a buffer which would be filled with raw data.
627  *
628  * @return The operation status.
629  * @retval MSG_OK if the function succeeded.
630  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
631  * be retrieved using @p i2cGetErrors().
632  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
633  *
634  * @api
635  */
636 #define lps25hThermometerReadRaw(devp, axes) \
637  thermometerReadRaw(&((devp)->thermo_if), axes)
638 
639 /**
640  * @brief Retrieves cooked data from the BaseThermometer.
641  * @note This data is manipulated according to the formula
642  * cooked = (raw * sensitivity) - bias.
643  * @note Final data is expressed as °C.
644  * @note The axes array must be at least the same size of the
645  * BaseThermometer axes number.
646  *
647  * @param[in] devp pointer to @p LPS25HDriver.
648  * @param[out] axes a buffer which would be filled with cooked data.
649  *
650  * @return The operation status.
651  * @retval MSG_OK if the function succeeded.
652  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
653  * be retrieved using @p i2cGetErrors().
654  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
655  *
656  * @api
657  */
658 #define lps25hThermometerReadCooked(devp, axes) \
659  thermometerReadCooked(&((devp)->thermo_if), axes)
660 
661 /**
662  * @brief Set bias values for the BaseThermometer.
663  * @note Bias must be expressed as °C.
664  * @note The bias buffer must be at least the same size of the
665  * BaseThermometer axes number.
666  *
667  * @param[in] devp pointer to @p LPS25HDriver.
668  * @param[in] bp a buffer which contains biases.
669  *
670  * @return The operation status.
671  * @retval MSG_OK if the function succeeded.
672  *
673  * @api
674  */
675 #define lps25hThermometerSetBias(devp, bp) \
676  thermometerSetBias(&((devp)->thermo_if), bp)
677 
678 /**
679  * @brief Reset bias values for the BaseThermometer.
680  * @note Default biases value are obtained from device datasheet when
681  * available otherwise they are considered zero.
682  *
683  * @param[in] devp pointer to @p LPS25HDriver.
684  *
685  * @return The operation status.
686  * @retval MSG_OK if the function succeeded.
687  *
688  * @api
689  */
690 #define lps25hThermometerResetBias(devp) \
691  thermometerResetBias(&((devp)->thermo_if))
692 
693 /**
694  * @brief Set sensitivity values for the BaseThermometer.
695  * @note Sensitivity must be expressed as °C/LSB.
696  * @note The sensitivity buffer must be at least the same size of the
697  * BaseThermometer axes number.
698  *
699  * @param[in] devp pointer to @p LPS25HDriver.
700  * @param[in] sp a buffer which contains sensitivities.
701  *
702  * @return The operation status.
703  * @retval MSG_OK if the function succeeded.
704  *
705  * @api
706  */
707 #define lps25hThermometerSetSensitivity(devp, sp) \
708  thermometerSetSensitivity(&((devp)->thermo_if), sp)
709 
710 /**
711  * @brief Reset sensitivity values for the BaseThermometer.
712  * @note Default sensitivities value are obtained from device datasheet.
713  *
714  * @param[in] devp pointer to @p LPS25HDriver.
715  *
716  * @return The operation status.
717  * @retval MSG_OK if the function succeeded.
718  *
719  * @api
720  */
721 #define lps25hThermometerResetSensitivity(devp) \
722  thermometerResetSensitivity(&((devp)->thermo_if))
723 
724 /*===========================================================================*/
725 /* External declarations. */
726 /*===========================================================================*/
727 
728 #ifdef __cplusplus
729 extern "C" {
730 #endif
731  void lps25hObjectInit(LPS25HDriver *devp);
732  void lps25hStart(LPS25HDriver *devp, const LPS25HConfig *config);
733  void lps25hStop(LPS25HDriver *devp);
734 #ifdef __cplusplus
735 }
736 #endif
737 
738 #endif /* _LPS25H_H_ */
739 
740 /** @} */
741 
LPS25H 2-axis barometer/thermometer class.
Definition: lps25h.h:473
#define _lps25h_methods
LPS25H specific methods with inherited ones.
Definition: lps25h.h:436
lps25h_avgt_t
LPS25H temperature resolution.
Definition: lps25h.h:338
I2CDriver * i2cp
I2C driver associated to this LPS25H.
Definition: lps25h.h:381
LPS25H configuration structure.
Definition: lps25h.h:365
lps25h_odr_t
LPS25H output data rate and bandwidth.
Definition: lps25h.h:317
Type of I2C driver configuration structure.
Definition: hal_i2c_lld.h:75
Base thermometer class.
float * barobias
LPS25H barometer subsystem initial bias.
Definition: lps25h.h:398
void lps25hStart(LPS25HDriver *devp, const LPS25HConfig *config)
Configures and activates LPS25H Complex Driver peripheral.
Definition: lps25h.c:572
BaseThermometer thermo_if
Base thermometer interface.
Definition: lps25h.h:479
float * thermosensitivity
LPS25H thermometer subsystem initial sensitivity.
Definition: lps25h.h:402
Generic barometer interface header.
#define _lps25h_data
LPS25HDriver specific data.
Definition: lps25h.h:452
lps25h_state_t
Driver state machine possible states.
Definition: lps25h.h:356
lps25h_bdu_t
LPS25H block data update.
Definition: lps25h.h:348
SPIDriver * spip
SPI driver associated to this LPS25H.
Definition: lps25h.h:371
float * barosensitivity
LPS25H barometer subsystem initial sensitivity.
Definition: lps25h.h:394
void lps25hObjectInit(LPS25HDriver *devp)
Initializes an instance.
Definition: lps25h.c:550
Structure representing an I2C driver.
Definition: hal_i2c_lld.h:88
lps25h_odr_t outputdatarate
LPS25H output data rate selection.
Definition: lps25h.h:410
lps25h_avgp_t baroresolution
LPS25H barometer subsystem resolution.
Definition: lps25h.h:419
const SPIConfig * spicfg
SPI configuration associated to this LPS25H.
Definition: lps25h.h:375
const I2CConfig * i2ccfg
I2C configuration associated to this LPS25H.
Definition: lps25h.h:385
Driver configuration structure.
Definition: hal_spi_lld.h:83
LPS25H virtual methods table.
Definition: lps25h.h:445
Base barometer class.
Definition: hal_barometer.h:86
lps25h_avgp_t
LPS25H pressure resolution.
Definition: lps25h.h:328
lps25h_bdu_t blockdataupdate
LPS25H block data update.
Definition: lps25h.h:415
Generic thermometer interface header.
void lps25hStop(LPS25HDriver *devp)
Deactivates the LPS25H Complex Driver peripheral.
Definition: lps25h.c:669
lps25h_sad_t
LPS25H slave address.
Definition: lps25h.h:309
lps25h_sad_t slaveaddress
LPS25H slave address.
Definition: lps25h.h:389
BaseBarometer baro_if
Base barometer interface.
Definition: lps25h.h:477
lps25h_avgt_t thermoresolution
LPS25H thermometer subsystem resolution.
Definition: lps25h.h:423
float * thermobias
LPS25H thermometer subsystem initial bias.
Definition: lps25h.h:406
const struct LPS25HVMT * vmt
Virtual Methods Table.
Definition: lps25h.h:475
Structure representing an SPI driver.
Definition: hal_spi_lld.h:128