Blame view

RIOT/drivers/include/mpl3115a2.h 5.14 KB
fb11e647   vrobic   reseau statique a...
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
  /*
   * Copyright (C) 2014 PHYTEC Messtechnik GmbH
   *
   * 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 and set activ the sensor
   *              will make measurements at periodic times.
   *              The oversample ratio can be determined
   *              by sensor initialization.
   *
   * @{
   *
   * @file
   * @brief       Interface definition for the MPL3115A2 sensor driver.
   *
   * @author      Johann Fischer <j.fischer@phytec.de>
   */
  
  #ifndef MPL3115A2_H
  #define MPL3115A2_H
  
  #include <stdint.h>
  #include <stdbool.h>
  #include "periph/i2c.h"
  
  #ifdef __cplusplus
  extern "C"
  {
  #endif
  
  #ifndef MPL3115A2_I2C_ADDRESS
  #define MPL3115A2_I2C_ADDRESS           0x60 /**< Pressure Sensor Default Address */
  #endif
  
  #define MPL3115A2_OS_RATIO_1            0 /**< Oversample Ratio 1, conversion time 6 ms */
  #define MPL3115A2_OS_RATIO_2            1 /**< Oversample Ratio 2, conversion time 10 ms */
  #define MPL3115A2_OS_RATIO_4            2 /**< Oversample Ratio 4, conversion time 18 ms */
  #define MPL3115A2_OS_RATIO_8            3 /**< Oversample Ratio 8, conversion time 34 ms */
  #define MPL3115A2_OS_RATIO_16           4 /**< Oversample Ratio 16, conversion time 66 ms */
  #define MPL3115A2_OS_RATIO_32           5 /**< Oversample Ratio 32, conversion time 130 ms */
  #define MPL3115A2_OS_RATIO_64           6 /**< Oversample Ratio 64, conversion time 258 ms */
  #define MPL3115A2_OS_RATIO_128          7 /**< Oversample Ratio 128, conversion time 512 ms */
  #define MPL3115A2_OS_RATIO_DEFAULT      MPL3115A2_OS_RATIO_128 /**< Default Ratio for testing */
  
  #ifndef MPL3115A2_CONVERSION_TIME
  #define MPL3115A2_CONVERSION_TIME       512000 /**< Maximum Conversion Time in us */
  #endif
  
  
  /**
   * @brief Device descriptor for MPL3115A2 sensors.
   */
  typedef struct {
      i2c_t i2c;              /**< I2C device, the sensor is connected to */
      uint8_t addr;           /**< the sensor's slave address on the I2C bus */
      bool initialized;       /**< sensor status, true if sensor is initialized */
  } mpl3115a2_t;
  
  /**
   * @brief MPL3115A2 sensor test.
   * This function looks for Device ID of the MPL3115A2 sensor.
   *
   * @param[in]  dev          device descriptor of sensor
   *
   * @return                  0 on success
   * @return                  -1 on error
   */
  int mpl3115a2_test(mpl3115a2_t *dev);
  
  /**
   * @brief Initialize the MPL3115A2 sensor driver.
   *
   * @param[out] dev          device descriptor of sensor to initialize
   * @param[in]  i2c          I2C bus the sensor is connected to
   * @param[in]  address      sensor's I2C slave address
   * @param[in]  os_ratio     oversample rate selection
   *
   * @return                  0 on success
   * @return                  -1 if os_ratio parameter is wrong
   * @return                  -2 if initialization of I2C bus failed
   * @return                  -3 if sensor test failed
   * @return                  -4 if sensor configuration failed
   */
  int mpl3115a2_init(mpl3115a2_t *dev, i2c_t i2c, uint8_t address, uint8_t os_ratio);
  
  /**
   * @brief Reset the MPL3115A2 sensor. After that, the sensor should be reinitialized.
   *
   * @param[out] dev          device descriptor of sensor
   *
   * @return                  0 on success
   * @return                  -1 on error
   */
  int mpl3115a2_reset(mpl3115a2_t *dev);
  
  /**
   * @brief Set active mode, this enables periodic measurements.
   *
   * @param[out] dev          device descriptor of sensor
   *
   * @return                  0 on success
   * @return                  -1 on error
   */
  int mpl3115a2_set_active(mpl3115a2_t *dev);
  
  /**
   * @brief Set standby mode.
   *
   * @param[in]  dev          device descriptor of sensor
   *
   * @return                  0 on success
   * @return                  -1 on error
   */
  int mpl3115a2_set_standby(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                  0 measurement in progress
   * @return                  -1 on error
   */
  int mpl3115a2_is_ready(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                  0 on success
   * @return                  -1 on error
   */
  int mpl3115a2_read_pressure(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                  0 on success
   * @return                  -1 on error
   */
  int mpl3115a2_read_temp(mpl3115a2_t *dev, int16_t *temp);
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif
  /** @} */