mirror of
https://github.com/eclipse/upm.git
synced 2025-03-25 17:59:59 +03:00

Signed-off-by: Henry Bruce <henry.bruce@intel.com> Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
153 lines
3.5 KiB
C++
153 lines
3.5 KiB
C++
#include <mraa/i2c.hpp>
|
|
#include "upm/iPressureSensor.h"
|
|
#include "upm/iTemperatureSensor.h"
|
|
#include "upm/iHumiditySensor.h"
|
|
#ifndef __BME280_H__
|
|
#define __BME280_H__
|
|
|
|
|
|
//#define BME280_MDELAY_DATA_TYPE uint32_t
|
|
|
|
/****************************************************/
|
|
/**\name I2C ADDRESS DEFINITIONS */
|
|
/***************************************************/
|
|
#define BME280_I2C_ADDRESS1 (0x76)
|
|
#define BME280_I2C_ADDRESS2 (0x77)
|
|
#define BME280_ONE_U8X (1)
|
|
|
|
namespace upm {
|
|
|
|
|
|
|
|
class BME280 : public ITemperatureSensor, public IHumiditySensor, public IPressureSensor {
|
|
public:
|
|
|
|
|
|
|
|
/**
|
|
* Instanciates a BME280 object
|
|
*
|
|
* @param bus number of used bus
|
|
* @param devAddr address of used i2c device
|
|
* @param mode BME280 mode
|
|
*/
|
|
BME280();
|
|
//BME280 (int bus, int devAddr= 0x77 , uint8_t mode = 0x03 );
|
|
BME280 (int bus, int devAddr = BME280_I2C_ADDRESS1);
|
|
|
|
/**
|
|
* BME280 object destructor, basicaly it close i2c connection.
|
|
*/
|
|
~BME280 ();
|
|
|
|
/**
|
|
* Get temperature measurement.
|
|
*/
|
|
uint16_t getTemperatureRaw ();
|
|
|
|
/**
|
|
* Get temperature measurement.
|
|
*/
|
|
int getTemperatureCelcius ();
|
|
|
|
/**
|
|
* Get relative humidity measurement.
|
|
*/
|
|
uint16_t getHumidityRaw ();
|
|
|
|
/**
|
|
* Get relative humidity measurement.
|
|
*/
|
|
int getHumidityRelative ();
|
|
|
|
/**
|
|
* Returns sensor module name
|
|
*/
|
|
const char* getModuleName() { return "BME280"; }
|
|
|
|
/**
|
|
* Return pressure
|
|
*/
|
|
uint32_t getPressureRaw();
|
|
|
|
/**
|
|
* Return calculated pressure (Pa)
|
|
*/
|
|
int getPressurePa();
|
|
|
|
|
|
/**
|
|
* Return temperature
|
|
*/
|
|
int32_t getTemperatureInternal(void);
|
|
|
|
/**
|
|
* Return pressure
|
|
*/
|
|
int32_t getPressureInternal(void);
|
|
/**
|
|
* Return humidity
|
|
*/
|
|
int32_t getHumidityInternal(void);
|
|
|
|
|
|
/**
|
|
* Return temperature
|
|
*/
|
|
int32_t getTemperatureRawInternal(void);
|
|
|
|
/**
|
|
* Return pressure
|
|
*/
|
|
int32_t getPressureRawInternal(void);
|
|
/**
|
|
* Return humidity
|
|
*/
|
|
int32_t getHumidityRawInternal(void);
|
|
|
|
|
|
|
|
|
|
//int32_t getTemperatureRaw(void);
|
|
|
|
/**
|
|
* Returns whether the sensor is configured.
|
|
*/
|
|
bool isConfigured();
|
|
|
|
/**
|
|
* Returns whether the correct chip is present at the given address.
|
|
*/
|
|
bool isAvailable();
|
|
|
|
|
|
private:
|
|
/**************************************************************/
|
|
/**\name STRUCTURE DEFINITIONS */
|
|
/**************************************************************/
|
|
/*!
|
|
* @brief This structure holds all device specific calibration parameters
|
|
*/
|
|
|
|
static mraa::I2c* m_i2c;
|
|
static int m_bus;
|
|
|
|
static int32_t i2c_write_string(uint8_t dev_addr,uint8_t* ptr, uint8_t cnt);
|
|
static int32_t i2c_write_read_string(uint8_t dev_addr,uint8_t reg_addr , uint8_t * ptr, uint8_t cnt);
|
|
static int8_t I2C_routine();
|
|
static int8_t BME280_I2C_bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t cnt);
|
|
static void BME280_delay_msek(uint16_t msek);
|
|
static int8_t BME280_I2C_bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t cnt);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
#endif
|