Blame view

RIOT/drivers/include/mpl3115a2.h 5.38 KB
a752c7ab   elopes   add first test an...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
  /*
   * Copyright (C) 2014 PHYTEC Messtechnik GmbH
   *               2017 HAW Hamburg
   *
   * This file is subject to the terms and conditions of the GNU Lesser
   * General Public License v2.1. See the file LICENSE in the top level
   * directory for more details.
   */
  
  /**
   * @defgroup    drivers_mpl3115a2 MPL3115A2 Pressure Sensor
   * @ingroup     drivers_sensors
   * @brief       Driver for the Freescale MPL3115A2 pressure sensor.
   *
   * The driver will initialize the sensor for pressure measurement. The
   * conversion duration depends on oversample ratio. After initialization
   * the sensor can be set active to run periodic measurements. The oversample
   * ratio can be configured during sensor initialization.
   *
   * @{
   *
   * @file
   * @brief       Interface definition for the MPL3115A2 sensor driver.
   *
   * @author      Johann Fischer <j.fischer@phytec.de>
   * @author      Sebastian Meiling <s@mlng.net>
   */
  
  #ifndef MPL3115A2_H
  #define MPL3115A2_H
  
  #include <stdint.h>
  #include <stdbool.h>
  #include "periph/i2c.h"
  
  #ifdef __cplusplus
  extern "C"
  {
  #endif
  
  /**
   * @brief   Named return values
   */
  enum {
      MPL3115A2_OK,               /**< all good */
      MPL3115A2_ERROR_I2C,        /**< I2C communication failed */
      MPL3115A2_ERROR_DEV,        /**< Device MPL3115A2 not found */
      MPL3115A2_ERROR_CNF,        /**< Device configuration failed */
  };
  
  #ifndef MPL3115A2_I2C_ADDRESS
  /**
   * @brief   MPL3115A2 Default Address
   */
  #define MPL3115A2_I2C_ADDRESS   (0x60)
  #endif
  
  /**
   * @name    Oversample Ratio configuration
   * @{
   */
  enum {
      MPL3115A2_OS_RATIO_1 = 0,   /**< Oversample Ratio 1, conversion 6ms */
      MPL3115A2_OS_RATIO_2,       /**< Oversample Ratio 2, conversion 10ms */
      MPL3115A2_OS_RATIO_4,       /**< Oversample Ratio 4, conversion 18ms */
      MPL3115A2_OS_RATIO_8,       /**< Oversample Ratio 8, conversion 34ms */
      MPL3115A2_OS_RATIO_16,      /**< Oversample Ratio 16, conversion 66ms */
      MPL3115A2_OS_RATIO_32,      /**< Oversample Ratio 32, conversion 130ms */
      MPL3115A2_OS_RATIO_64,      /**< Oversample Ratio 64, conversion 258ms */
      MPL3115A2_OS_RATIO_128,     /**< Oversample Ratio 128, conversion 514ms */
  };
  #define MPL3115A2_OS_RATIO_DEFAULT  MPL3115A2_OS_RATIO_16 /**< Default Ratio */
  /** @} */
  
  #ifndef MPL3115A2_CONVERSION_TIME
  /**
   * @brief   Maximum Conversion Time in microseconds [us]
   *
   * @note    Conversion time is: ((oversampling ratio * 4) + 2) * 1000 us
   */
  #define MPL3115A2_CONVERSION_TIME   (514000UL)
  #endif
  
  /**
   * @brief   Configuration parameters
   */
  typedef struct {
      i2c_t i2c;                  /**< I2C bus the device is connected to */
      uint8_t addr;               /**< I2C bus address of the device */
      uint8_t ratio;              /**< MPL3115A2 oversampling ratio */
  } mpl3115a2_params_t;
  
  /**
   * @brief   Device descriptor for MPL3115A2 sensors.
   */
  typedef struct {
      mpl3115a2_params_t params;  /**< device configuration parameters */
  } mpl3115a2_t;
  
  /**
   * @brief   Initialize the MPL3115A2 sensor driver.
   *
   * @param[out] dev          device descriptor of sensor to initialize
   * @param[in]  params       configuration parameters
   *
   * @return                  MPL3115A2_OK on success
   * @return                  -MPL3115A2_ERROR_I2C on I2C bus error
   * @return                  -MPL3115A2_ERROR_DEV on device error
   * @return                  -MPL3115A2_ERROR_CNF on config error
   */
  int mpl3115a2_init(mpl3115a2_t *dev, const mpl3115a2_params_t *params);
  
  /**
   * @brief   Reset the MPL3115A2 sensor. After that, the sensor should be reinitialized.
   *
   * @param[in] dev           device descriptor of sensor
   *
   * @return                  MPL3115A2_OK on success
   * @return                  -MPL3115A2_ERROR_I2C on error
   */
  int mpl3115a2_reset(const mpl3115a2_t *dev);
  
  /**
   * @brief   Set active mode, this enables periodic measurements.
   *
   * @param[in] dev           device descriptor of sensor
   *
   * @return                  MPL3115A2_OK on success
   * @return                  -MPL3115A2_ERROR_I2C on error
   */
  int mpl3115a2_set_active(const mpl3115a2_t *dev);
  
  /**
   * @brief   Set standby mode.
   *
   * @param[in]  dev          device descriptor of sensor
   *
   * @return                  MPL3115A2_OK on success
   * @return                  -MPL3115A2_ERROR_I2C on error
   */
  int mpl3115a2_set_standby(const mpl3115a2_t *dev);
  
  /**
   * @brief   Check for new set of measurement data.
   *
   * @param[in]  dev          device descriptor of sensor
   *
   * @return                  >0 if new data sample is ready
   * @return                  MPL3115A2_OK measurement in progress
   * @return                  -MPL3115A2_ERROR_I2C on error
   */
  int mpl3115a2_is_ready(const mpl3115a2_t *dev);
  
  /**
   * @brief   Read sensor's data in pressure mode.
   *
   * @param[in]  dev          device descriptor of sensor
   * @param[out] pres         pressure in Pascals
   * @param[out] status       sensor status register
   *
   * @return                  MPL3115A2_OK on success,
   * @return                  -MPL3115A2_ERROR_I2C on error
   */
  int mpl3115a2_read_pressure(const mpl3115a2_t *dev, uint32_t *pres, uint8_t *status);
  
  /**
   * @brief   Read sensor's temperature.
   *
   * @param[in]  dev          device descriptor of sensor
   * @param[out] temp         temperature in \f$^\circ C \cdot 10\f$
   *
   * @return                  MPL3115A2_OK on success
   * @return                  -MPL3115A2_ERROR_I2C on error
   */
  int mpl3115a2_read_temp(const mpl3115a2_t *dev, int16_t *temp);
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* MPL3115A2_H */
  /** @} */