ChibiOS  0.0.0
lps22hb.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 lps22hb.h
23  * @brief LPS22HB MEMS interface module header.
24  *
25  * @addtogroup LPS22HB
26  * @ingroup EX_ST
27  * @{
28  */
29 #ifndef _LPS22HB_H_
30 #define _LPS22HB_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 LPS22HB driver version string.
45  */
46 #define EX_LPS22HB_VERSION "1.0.0"
47 
48 /**
49  * @brief LPS22HB driver version major number.
50  */
51 #define EX_LPS22HB_MAJOR 1
52 
53 /**
54  * @brief LPS22HB driver version minor number.
55  */
56 #define EX_LPS22HB_MINOR 0
57 
58 /**
59  * @brief LPS22HB driver version patch number.
60  */
61 #define EX_LPS22HB_PATCH 0
62 /** @} */
63 
64 /**
65  * @brief LPS22HB 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 LPS22HB_BARO_NUMBER_OF_AXES 1U
73 
74 #define LPS22HB_BARO_SENS 0.00024414f
75 #define LPS22HB_BARO_BIAS 0.0f
76 /** @} */
77 
78 /**
79  * @brief LPS22HB thermometer subsystem characteristics.
80  * @note Sensitivity is expressed as °C/LSB.
81  * @note Bias is expressed as °C.
82  *
83  * @{
84  */
85 #define LPS22HB_THERMO_NUMBER_OF_AXES 1U
86 
87 #define LPS22HB_THERMO_SENS 0.01f
88 #define LPS22HB_THERMO_BIAS 0.0f
89 /** @} */
90 
91 /**
92  * @name LPS22HB communication interfaces related bit masks
93  * @{
94  */
95 #define LPS22HB_DI_MASK 0xFF
96 #define LPS22HB_DI(n) (1 << n)
97 #define LPS22HB_AD_MASK 0x3F
98 #define LPS22HB_AD(n) (1 << n)
99 #define LPS22HB_MS (1 << 6)
100 #define LPS22HB_RW (1 << 7)
101 
102 #define LPS22HB_SUB_MS (1 << 7)
103 /** @} */
104 
105 /**
106  * @name LPS22HB register addresses
107  * @{
108  */
109 #define LPS22HB_AD_INT_CFG 0x0B
110 #define LPS22HB_AD_THS_P_L 0x0C
111 #define LPS22HB_AD_THS_P_H 0x0D
112 #define LPS22HB_AD_WHO_AM_I 0x0F
113 #define LPS22HB_AD_CTRL_REG1 0x10
114 #define LPS22HB_AD_CTRL_REG2 0x11
115 #define LPS22HB_AD_CTRL_REG3 0x12
116 #define LPS22HB_AD_FIFO_CTRL 0x14
117 #define LPS22HB_AD_REF_P_XL 0x15
118 #define LPS22HB_AD_REF_P_L 0x16
119 #define LPS22HB_AD_REF_P_H 0x17
120 #define LPS22HB_AD_RPDS_L 0x18
121 #define LPS22HB_AD_RPDS_H 0x19
122 #define LPS22HB_AD_RES_CONF 0x1A
123 #define LPS22HB_AD_INT_SRC 0x25
124 #define LPS22HB_AD_FIFO_SRC 0x26
125 #define LPS22HB_AD_STATUS_REG 0x27
126 #define LPS22HB_AD_PRESS_OUT_XL 0x28
127 #define LPS22HB_AD_PRESS_OUT_L 0x29
128 #define LPS22HB_AD_PRESS_OUT_H 0x2A
129 #define LPS22HB_AD_TEMP_OUT_L 0x2B
130 #define LPS22HB_AD_TEMP_OUT_H 0x2C
131 #define LPS22HB_AD_LPFP_RES 0x33
132 /** @} */
133 
134 /**
135  * @name LPS22HB_INT_CFG register bits definitions
136  * @{
137  */
138 #define LPS22HB_INT_CFG_MASK 0xFF
139 #define LPS22HB_INT_CFG_PHE (1 << 0)
140 #define LPS22HB_INT_CFG_PLE (1 << 1)
141 #define LPS22HB_INT_CFG_LIR (1 << 2)
142 #define LPS22HB_INT_CFG_DIFF_EN (1 << 3)
143 #define LPS22HB_INT_CFG_RESET_AZ (1 << 4)
144 #define LPS22HB_INT_CFG_AUTOZERO (1 << 5)
145 #define LPS22HB_INT_CFG_RESET_ARP (1 << 6)
146 #define LPS22HB_INT_CFG_AUTORIFP (1 << 7)
147 /** @} */
148 
149 /**
150  * @name LPS22HB_CTRL_REG1 register bits definitions
151  * @{
152  */
153 #define LPS22HB_CTRL_REG1_MASK 0x7F
154 #define LPS22HB_CTRL_REG1_SIM (1 << 0)
155 #define LPS22HB_CTRL_REG1_BDU (1 << 1)
156 #define LPS22HB_CTRL_REG1_LPFP_CFG (1 << 2)
157 #define LPS22HB_CTRL_REG1_LPFP_EN (1 << 3)
158 #define LPS22HB_CTRL_REG1_ODR0 (1 << 4)
159 #define LPS22HB_CTRL_REG1_ODR1 (1 << 5)
160 #define LPS22HB_CTRL_REG1_ODR2 (1 << 6)
161 /** @} */
162 
163 /**
164  * @name LPS22HB_CTRL_REG2 register bits definitions
165  * @{
166  */
167 #define LPS22HB_CTRL_REG2_MASK 0xFD
168 #define LPS22HB_CTRL_REG2_ONE_SHOT (1 << 0)
169 #define LPS22HB_CTRL_REG2_SWRESET (1 << 2)
170 #define LPS22HB_CTRL_REG2_I2C_DIS (1 << 3)
171 #define LPS22HB_CTRL_REG2_IF_ADD_INC (1 << 4)
172 #define LPS22HB_CTRL_REG2_STOP_ON_FTH (1 << 5)
173 #define LPS22HB_CTRL_REG2_FIFO_EN (1 << 6)
174 #define LPS22HB_CTRL_REG2_BOOT (1 << 7)
175 /** @} */
176 
177 /**
178  * @name LPS22HB_CTRL_REG3 register bits definitions
179  * @{
180  */
181 #define LPS22HB_CTRL_REG3_MASK 0xFF
182 #define LPS22HB_CTRL_REG3_INT_S1 (1 << 0)
183 #define LPS22HB_CTRL_REG3_INT_S2 (1 << 1)
184 #define LPS22HB_CTRL_REG3_DRDY (1 << 2)
185 #define LPS22HB_CTRL_REG3_F_OVR (1 << 3)
186 #define LPS22HB_CTRL_REG3_F_FTH (1 << 4)
187 #define LPS22HB_CTRL_REG3_F_FSS5 (1 << 5)
188 #define LPS22HB_CTRL_REG3_PP_OD (1 << 6)
189 #define LPS22HB_CTRL_REG3_INT_H_L (1 << 7)
190 /** @} */
191 
192 /**
193  * @name LPS22HB_INT_SRC register bits definitions
194  * @{
195  */
196 #define LPS22HB_INT_SRC_MASK 0x87
197 #define LPS22HB_INT_SRC_PH (1 << 0)
198 #define LPS22HB_INT_SRC_PL (1 << 1)
199 #define LPS22HB_INT_SRC_IA (1 << 2)
200 #define LPS22HB_INT_SRC_BOOT_STATUS (1 << 8)
201 /** @} */
202 
203 /*===========================================================================*/
204 /* Driver pre-compile time settings. */
205 /*===========================================================================*/
206 
207 /**
208  * @name Configuration options
209  * @{
210  */
211 /**
212  * @brief LPS22HB SPI interface switch.
213  * @details If set to @p TRUE the support for SPI is included.
214  * @note The default is @p FALSE.
215  */
216 #if !defined(LPS22HB_USE_SPI) || defined(__DOXYGEN__)
217 #define LPS22HB_USE_SPI FALSE
218 #endif
219 
220 /**
221  * @brief LPS22HB shared SPI switch.
222  * @details If set to @p TRUE the device acquires SPI bus ownership
223  * on each transaction.
224  * @note The default is @p FALSE. Requires SPI_USE_MUTUAL_EXCLUSION.
225  */
226 #if !defined(LPS22HB_SHARED_SPI) || defined(__DOXYGEN__)
227 #define LPS22HB_SHARED_SPI FALSE
228 #endif
229 
230 /**
231  * @brief LPS22HB I2C interface switch.
232  * @details If set to @p TRUE the support for I2C is included.
233  * @note The default is @p TRUE.
234  */
235 #if !defined(LPS22HB_USE_I2C) || defined(__DOXYGEN__)
236 #define LPS22HB_USE_I2C TRUE
237 #endif
238 
239 /**
240  * @brief LPS22HB shared I2C switch.
241  * @details If set to @p TRUE the device acquires I2C bus ownership
242  * on each transaction.
243  * @note The default is @p FALSE. Requires I2C_USE_MUTUAL_EXCLUSION.
244  */
245 #if !defined(LPS22HB_SHARED_I2C) || defined(__DOXYGEN__)
246 #define LPS22HB_SHARED_I2C FALSE
247 #endif
248 
249 /**
250  * @brief LPS22HB accelerometer subsystem advanced configurations
251  * switch.
252  * @details If set to @p TRUE more configurations are available.
253  * @note The default is @p FALSE.
254  */
255 #if !defined(LPS22HB_USE_ADVANCED) || defined(__DOXYGEN__)
256 #define LPS22HB_USE_ADVANCED FALSE
257 #endif
258 /** @} */
259 
260 /*===========================================================================*/
261 /* Derived constants and error checks. */
262 /*===========================================================================*/
263 
264 #if !(LPS22HB_USE_SPI ^ LPS22HB_USE_I2C)
265 #error "LPS22HB_USE_SPI and LPS22HB_USE_I2C cannot be both true or both false"
266 #endif
267 
268 #if LPS22HB_USE_SPI && !HAL_USE_SPI
269 #error "LPS22HB_USE_SPI requires HAL_USE_SPI"
270 #endif
271 
272 #if LPS22HB_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION
273 #error "LPS22HB_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION"
274 #endif
275 
276 #if LPS22HB_USE_I2C && !HAL_USE_I2C
277 #error "LPS22HB_USE_I2C requires HAL_USE_I2C"
278 #endif
279 
280 #if LPS22HB_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION
281 #error "LPS22HB_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION"
282 #endif
283 
284 /**
285  * @todo Add support for LPS22HB over SPI.
286  */
287 #if LPS22HB_USE_SPI
288 #error "LPS22HB over SPI still not supported"
289 #endif
290 
291 /*===========================================================================*/
292 /* Driver data structures and types. */
293 /*===========================================================================*/
294 
295 /**
296  * @name LPS22HB data structures and types.
297  * @{
298  */
299 /**
300  * @brief Structure representing a LPS22HB driver.
301  */
303 
304 /**
305  * @brief LPS22HB slave address
306  */
307 typedef enum {
308  LPS22HB_SAD_GND = 0x5C, /**< Slave Address when SA0 is to GND */
309  LPS22HB_SAD_VCC = 0x5D /**< Slave Address when SA0 is to VCC */
311 
312 /**
313  * @brief LPS22HB output data rate and bandwidth.
314  */
315 typedef enum {
316  LPS22HB_ODR_PD = 0x00, /**< Power down. */
317  LPS22HB_ODR_1HZ = 0x10, /**< Output data rate 1 Hz. */
318  LPS22HB_ODR_10HZ = 0x20, /**< Output data rate 10 Hz. */
319  LPS22HB_ODR_25HZ = 0x30, /**< Output data rate 25 Hz. */
320  LPS22HB_ODR_50HZ = 0x40, /**< Output data rate 50 Hz. */
321  LPS22HB_ODR_75HZ = 0x50 /**< Output data rate 75 Hz. */
323 
324 /**
325  * @brief LPS22HB pressure resolution.
326  */
327 typedef enum {
328  LPS22HB_LP_DISABLED = 0x00, /**< LP Filter disabled. */
329  LPS22HB_LP_ODR_9 = 0x08, /**< LP Filter enabled. Cut-off ORD/9. */
330  LPS22HB_LP_ODR_20 = 0x0C /**< LP Filter enabled. Cut-off ORD/20. */
331 }lps22hb_lp_t;
332 
333 /**
334  * @brief LPS22HB block data update.
335  */
336 typedef enum {
337  LPS22HB_BDU_CONTINUOUS = 0x00, /**< Block data continuously updated. */
338  LPS22HB_BDU_BLOCKED = 0x40 /**< Block data updated after reading. */
340 
341 /**
342  * @brief Driver state machine possible states.
343  */
344 typedef enum {
345  LPS22HB_UNINIT = 0, /**< Not initialized. */
346  LPS22HB_STOP = 1, /**< Stopped. */
347  LPS22HB_READY = 2, /**< Ready. */
349 
350 /**
351  * @brief LPS22HB configuration structure.
352  */
353 typedef struct {
354 
355 #if LPS22HB_USE_SPI || defined(__DOXYGEN__)
356  /**
357  * @brief SPI driver associated to this LPS22HB.
358  */
360  /**
361  * @brief SPI configuration associated to this LPS22HB.
362  */
364 #endif /* LPS22HB_USE_SPI */
365 #if LPS22HB_USE_I2C || defined(__DOXYGEN__)
366  /**
367  * @brief I2C driver associated to this LPS22HB.
368  */
370  /**
371  * @brief I2C configuration associated to this LPS22HB.
372  */
374  /**
375  * @brief LPS22HB slave address
376  */
378 #endif /* LPS22HB_USE_I2C */
379  /**
380  * @brief LPS22HB barometer subsystem initial sensitivity.
381  */
383  /**
384  * @brief LPS22HB barometer subsystem initial bias.
385  */
386  float *barobias;
387  /**
388  * @brief LPS22HB thermometer subsystem initial sensitivity.
389  */
391  /**
392  * @brief LPS22HB thermometer subsystem initial bias.
393  */
394  float *thermobias;
395  /**
396  * @brief LPS22HB output data rate selection.
397  */
399 #if LPS22HB_USE_ADVANCED || defined(__DOXYGEN__)
400  /**
401  * @brief LPS22HB block data update.
402  */
404  /**
405  * @brief LPS22HB barometer subsystem resolution.
406  */
408 #endif
409 } LPS22HBConfig;
410 
411 /**
412  * @brief @p LPS22HB specific methods.
413  * @note No methods so far, just a common ancestor interface.
414  */
415 #define _lps22hb_methods_alone
416 
417 /**
418  * @brief @p LPS22HB specific methods with inherited ones.
419  */
420 #define _lps22hb_methods \
421  _base_object_methods \
422  _lps22hb_methods_alone
423 
424 /**
425  * @extends BaseObjectVMT
426  *
427  * @brief @p LPS22HB virtual methods table.
428  */
429 struct LPS22HBVMT {
431 };
432 
433 /**
434  * @brief @p LPS22HBDriver specific data.
435  */
436 #define _lps22hb_data \
437  /* Driver state.*/ \
438  lps22hb_state_t state; \
439  /* Current configuration data.*/ \
440  const LPS22HBConfig *config; \
441  /* Barometer subsystem axes number.*/ \
442  size_t baroaxes; \
443  /* Barometer subsystem current sensitivity.*/ \
444  float barosensitivity; \
445  /* Barometer subsystem current bias .*/ \
446  float barobias; \
447  /* Thermometer subsystem axes number.*/ \
448  size_t thermoaxes; \
449  /* Thermometer subsystem current sensitivity.*/ \
450  float thermosensitivity; \
451  /* Thermometer subsystem current bias.*/ \
452  float thermobias;
453 
454 /**
455  * @brief LPS22HB 2-axis barometer/thermometer class.
456  */
458  /** @brief Virtual Methods Table.*/
459  const struct LPS22HBVMT *vmt;
460  /** @brief Base barometer interface.*/
462  /** @brief Base thermometer interface.*/
465 };
466 /** @} */
467 
468 /*===========================================================================*/
469 /* Driver macros. */
470 /*===========================================================================*/
471 
472 /**
473  * @brief Return the number of axes of the BaseBarometer.
474  *
475  * @param[in] devp pointer to @p LPS22HBDriver.
476  *
477  * @return the number of axes.
478  *
479  * @api
480  */
481 #define lps22hbBarometerGetAxesNumber(devp) \
482  barometerGetAxesNumber(&((devp)->baro_if))
483 
484 /**
485  * @brief Retrieves raw data from the BaseBarometer.
486  * @note This data is retrieved from MEMS register without any algebraical
487  * manipulation.
488  * @note The axes array must be at least the same size of the
489  * BaseBarometer axes number.
490  *
491  * @param[in] devp pointer to @p LPS22HBDriver.
492  * @param[out] axes a buffer which would be filled with raw data.
493  *
494  * @return The operation status.
495  * @retval MSG_OK if the function succeeded.
496  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
497  * be retrieved using @p i2cGetErrors().
498  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
499  *
500  * @api
501  */
502 #define lps22hbBarometerReadRaw(devp, axes) \
503  barometerReadRaw(&((devp)->baro_if), axes)
504 
505 /**
506  * @brief Retrieves cooked data from the BaseBarometer.
507  * @note This data is manipulated according to the formula
508  * cooked = (raw * sensitivity) - bias.
509  * @note Final data is expressed as hPa.
510  * @note The axes array must be at least the same size of the
511  * BaseBarometer axes number.
512  *
513  * @param[in] devp pointer to @p LPS22HBDriver.
514  * @param[out] axes a buffer which would be filled with cooked data.
515  *
516  * @return The operation status.
517  * @retval MSG_OK if the function succeeded.
518  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
519  * be retrieved using @p i2cGetErrors().
520  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
521  *
522  * @api
523  */
524 #define lps22hbBarometerReadCooked(devp, axes) \
525  barometerReadCooked(&((devp)->baro_if), axes)
526 
527 /**
528  * @brief Set bias values for the BaseBarometer.
529  * @note Bias must be expressed as hPa.
530  * @note The bias buffer must be at least the same size of the
531  * BaseBarometer axes number.
532  *
533  * @param[in] devp pointer to @p LPS22HBDriver.
534  * @param[in] bp a buffer which contains biases.
535  *
536  * @return The operation status.
537  * @retval MSG_OK if the function succeeded.
538  *
539  * @api
540  */
541 #define lps22hbBarometerSetBias(devp, bp) \
542  barometerSetBias(&((devp)->baro_if), bp)
543 
544 /**
545  * @brief Reset bias values for the BaseBarometer.
546  * @note Default biases value are obtained from device datasheet when
547  * available otherwise they are considered zero.
548  *
549  * @param[in] devp pointer to @p LPS22HBDriver.
550  *
551  * @return The operation status.
552  * @retval MSG_OK if the function succeeded.
553  *
554  * @api
555  */
556 #define lps22hbBarometerResetBias(devp) \
557  barometerResetBias(&((devp)->baro_if))
558 
559 /**
560  * @brief Set sensitivity values for the BaseBarometer.
561  * @note Sensitivity must be expressed as hPa/LSB.
562  * @note The sensitivity buffer must be at least the same size of the
563  * BaseBarometer axes number.
564  *
565  * @param[in] devp pointer to @p LPS22HBDriver.
566  * @param[in] sp a buffer which contains sensitivities.
567  *
568  * @return The operation status.
569  * @retval MSG_OK if the function succeeded.
570  *
571  * @api
572  */
573 #define lps22hbBarometerSetSensitivity(devp, sp) \
574  barometerSetSensitivity(&((devp)->baro_if), sp)
575 
576 /**
577  * @brief Reset sensitivity values for the BaseBarometer.
578  * @note Default sensitivities value are obtained from device datasheet.
579  *
580  * @param[in] devp pointer to @p LPS22HBDriver.
581  *
582  * @return The operation status.
583  * @retval MSG_OK if the function succeeded.
584  *
585  * @api
586  */
587 #define lps22hbBarometerResetSensitivity(devp) \
588  barometerResetSensitivity(&((devp)->baro_if))
589 
590 /**
591  * @brief Return the number of axes of the BaseThermometer.
592  *
593  * @param[in] devp pointer to @p LPS22HBDriver.
594  *
595  * @return the number of axes.
596  *
597  * @api
598  */
599 #define lps22hbThermometerGetAxesNumber(devp) \
600  thermometerGetAxesNumber(&((devp)->thermo_if))
601 
602 /**
603  * @brief Retrieves raw data from the BaseThermometer.
604  * @note This data is retrieved from MEMS register without any algebraical
605  * manipulation.
606  * @note The axes array must be at least the same size of the
607  * BaseThermometer axes number.
608  *
609  * @param[in] devp pointer to @p LPS22HBDriver.
610  * @param[out] axes a buffer which would be filled with raw data.
611  *
612  * @return The operation status.
613  * @retval MSG_OK if the function succeeded.
614  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
615  * be retrieved using @p i2cGetErrors().
616  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
617  *
618  * @api
619  */
620 #define lps22hbThermometerReadRaw(devp, axes) \
621  thermometerReadRaw(&((devp)->thermo_if), axes)
622 
623 /**
624  * @brief Retrieves cooked data from the BaseThermometer.
625  * @note This data is manipulated according to the formula
626  * cooked = (raw * sensitivity) - bias.
627  * @note Final data is expressed as °C.
628  * @note The axes array must be at least the same size of the
629  * BaseThermometer axes number.
630  *
631  * @param[in] devp pointer to @p LPS22HBDriver.
632  * @param[out] axes a buffer which would be filled with cooked data.
633  *
634  * @return The operation status.
635  * @retval MSG_OK if the function succeeded.
636  * @retval MSG_RESET if one or more I2C errors occurred, the errors can
637  * be retrieved using @p i2cGetErrors().
638  * @retval MSG_TIMEOUT if a timeout occurred before operation end.
639  *
640  * @api
641  */
642 #define lps22hbThermometerReadCooked(devp, axes) \
643  thermometerReadCooked(&((devp)->thermo_if), axes)
644 
645 /**
646  * @brief Set bias values for the BaseThermometer.
647  * @note Bias must be expressed as °C.
648  * @note The bias buffer must be at least the same size of the
649  * BaseThermometer axes number.
650  *
651  * @param[in] devp pointer to @p LPS22HBDriver.
652  * @param[in] bp a buffer which contains biases.
653  *
654  * @return The operation status.
655  * @retval MSG_OK if the function succeeded.
656  *
657  * @api
658  */
659 #define lps22hbThermometerSetBias(devp, bp) \
660  thermometerSetBias(&((devp)->thermo_if), bp)
661 
662 /**
663  * @brief Reset bias values for the BaseThermometer.
664  * @note Default biases value are obtained from device datasheet when
665  * available otherwise they are considered zero.
666  *
667  * @param[in] devp pointer to @p LPS22HBDriver.
668  *
669  * @return The operation status.
670  * @retval MSG_OK if the function succeeded.
671  *
672  * @api
673  */
674 #define lps22hbThermometerResetBias(devp) \
675  thermometerResetBias(&((devp)->thermo_if))
676 
677 /**
678  * @brief Set sensitivity values for the BaseThermometer.
679  * @note Sensitivity must be expressed as °C/LSB.
680  * @note The sensitivity buffer must be at least the same size of the
681  * BaseThermometer axes number.
682  *
683  * @param[in] devp pointer to @p LPS22HBDriver.
684  * @param[in] sp a buffer which contains sensitivities.
685  *
686  * @return The operation status.
687  * @retval MSG_OK if the function succeeded.
688  *
689  * @api
690  */
691 #define lps22hbThermometerSetSensitivity(devp, sp) \
692  thermometerSetSensitivity(&((devp)->thermo_if), sp)
693 
694 /**
695  * @brief Reset sensitivity values for the BaseThermometer.
696  * @note Default sensitivities value are obtained from device datasheet.
697  *
698  * @param[in] devp pointer to @p LPS22HBDriver.
699  *
700  * @return The operation status.
701  * @retval MSG_OK if the function succeeded.
702  *
703  * @api
704  */
705 #define lps22hbThermometerResetSensitivity(devp) \
706  thermometerResetSensitivity(&((devp)->thermo_if))
707 
708 /*===========================================================================*/
709 /* External declarations. */
710 /*===========================================================================*/
711 
712 #ifdef __cplusplus
713 extern "C" {
714 #endif
715  void lps22hbObjectInit(LPS22HBDriver *devp);
716  void lps22hbStart(LPS22HBDriver *devp, const LPS22HBConfig *config);
717  void lps22hbStop(LPS22HBDriver *devp);
718 #ifdef __cplusplus
719 }
720 #endif
721 
722 #endif /* _LPS22HB_H_ */
723 
724 /** @} */
725 
lps22hb_odr_t outputdatarate
LPS22HB output data rate selection.
Definition: lps22hb.h:398
lps22hb_lp_t
LPS22HB pressure resolution.
Definition: lps22hb.h:327
lps22hb_sad_t slaveaddress
LPS22HB slave address.
Definition: lps22hb.h:377
Type of I2C driver configuration structure.
Definition: hal_i2c_lld.h:75
const struct LPS22HBVMT * vmt
Virtual Methods Table.
Definition: lps22hb.h:459
Base thermometer class.
SPIDriver * spip
SPI driver associated to this LPS22HB.
Definition: lps22hb.h:359
Generic barometer interface header.
lps22hb_odr_t
LPS22HB output data rate and bandwidth.
Definition: lps22hb.h:315
I2CDriver * i2cp
I2C driver associated to this LPS22HB.
Definition: lps22hb.h:369
float * barosensitivity
LPS22HB barometer subsystem initial sensitivity.
Definition: lps22hb.h:382
float * barobias
LPS22HB barometer subsystem initial bias.
Definition: lps22hb.h:386
lps22hb_bdu_t
LPS22HB block data update.
Definition: lps22hb.h:336
const SPIConfig * spicfg
SPI configuration associated to this LPS22HB.
Definition: lps22hb.h:363
lps22hb_state_t
Driver state machine possible states.
Definition: lps22hb.h:344
void lps22hbStart(LPS22HBDriver *devp, const LPS22HBConfig *config)
Configures and activates LPS22HB Complex Driver peripheral.
Definition: lps22hb.c:565
LPS22HB configuration structure.
Definition: lps22hb.h:353
Structure representing an I2C driver.
Definition: hal_i2c_lld.h:88
const I2CConfig * i2ccfg
I2C configuration associated to this LPS22HB.
Definition: lps22hb.h:373
lps22hb_lp_t lowpass_filter
LPS22HB barometer subsystem resolution.
Definition: lps22hb.h:407
LPS22HB virtual methods table.
Definition: lps22hb.h:429
Driver configuration structure.
Definition: hal_spi_lld.h:83
BaseBarometer baro_if
Base barometer interface.
Definition: lps22hb.h:461
float * thermobias
LPS22HB thermometer subsystem initial bias.
Definition: lps22hb.h:394
lps22hb_sad_t
LPS22HB slave address.
Definition: lps22hb.h:307
Base barometer class.
Definition: hal_barometer.h:86
void lps22hbStop(LPS22HBDriver *devp)
Deactivates the LPS22HB Complex Driver peripheral.
Definition: lps22hb.c:655
void lps22hbObjectInit(LPS22HBDriver *devp)
Initializes an instance.
Definition: lps22hb.c:543
lps22hb_bdu_t blockdataupdate
LPS22HB block data update.
Definition: lps22hb.h:403
#define _lps22hb_methods
LPS22HB specific methods with inherited ones.
Definition: lps22hb.h:420
Generic thermometer interface header.
float * thermosensitivity
LPS22HB thermometer subsystem initial sensitivity.
Definition: lps22hb.h:390
LPS22HB 2-axis barometer/thermometer class.
Definition: lps22hb.h:457
#define _lps22hb_data
LPS22HBDriver specific data.
Definition: lps22hb.h:436
BaseThermometer thermo_if
Base thermometer interface.
Definition: lps22hb.h:463
Structure representing an SPI driver.
Definition: hal_spi_lld.h:128