mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
189 lines
5.6 KiB
C
189 lines
5.6 KiB
C
/*
|
|
* 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
|
|
* @ingroup drivers_saul
|
|
* @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.
|
|
*
|
|
* This driver provides @ref drivers_saul capabilities.
|
|
* @{
|
|
*
|
|
* @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 */
|
|
};
|
|
|
|
/**
|
|
* @brief MPL3115A2 Default Address
|
|
*/
|
|
#define MPL3115A2_I2C_ADDRESS (0x60)
|
|
|
|
/**
|
|
* @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 */
|
|
/** @} */
|
|
|
|
/**
|
|
* @defgroup drivers_mpl3115a2_config MPL3115A2 Pressure Sensor driver compile configuration
|
|
* @ingroup config_drivers_sensors
|
|
* @{
|
|
*/
|
|
/**
|
|
* @brief Maximum Conversion Time in microseconds [us]
|
|
*
|
|
* @note Conversion time is: ((oversampling ratio * 4) + 2) * 1000 us
|
|
*/
|
|
#ifndef MPL3115A2_CONVERSION_TIME
|
|
#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 */
|
|
/** @} */
|