-
Notifications
You must be signed in to change notification settings - Fork 0
/
data.hpp
127 lines (125 loc) · 3.33 KB
/
data.hpp
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
#ifndef DATA_H_
#define DATA_H_
#include <cstdint>
#include "calib.hpp"
/*!
* @brief bme280 sensor class which comprises of temperature, pressure and
* humidity data
*/
class data
{
public:
void reset()
{
resetUncompensated();
resetCompensated();
}
calib_data& returnCalibData()
{
return m_calib_data;
}
void resetUncompensated()
{
m_uncomp_pressure={0};
m_uncomp_temperature={0};
m_uncomp_humidity={0};
}
void resetCompensated()
{
m_pressure={0};
m_temperature={0};
m_humidity={0};
}
#ifdef BME280_FLOAT_ENABLE
double getTemperature() const
{
return m_temperature;
}
double getPressure() const
{
return m_pressure;
}
double getHumidity() const
{
return m_humidity;
}
#else
uint32_t getTemperature() const
{
return m_temperature;
}
uint32_t getPressure() const
{
return m_pressure;
}
uint32_t getHumidity() const
{
return m_humidity;
}
#endif
void setUncompPressure(const uint8_t& p1,const uint8_t& p2,const uint8_t& p3)
{
uint32_t data_xlsb{(uint32_t)p3 >> 4};
uint32_t data_lsb{(uint32_t)p2 << 4};
uint32_t data_msb{(uint32_t)p1 << 12};
m_uncomp_pressure=data_msb | data_lsb | data_xlsb;
}
void setUncompTemperature(const uint8_t& t1,const uint8_t& t2,const uint8_t& t3)
{
uint32_t data_xlsb{(uint32_t)t3 >> 4};
uint32_t data_lsb{(uint32_t)t2 << 4};
uint32_t data_msb{(uint32_t)t1 << 12};
m_uncomp_temperature=data_msb | data_lsb | data_xlsb;
}
void setUncompHumidity(const uint8_t& h1,const uint8_t& h2)
{
uint32_t data_lsb{(uint32_t)h1 << 8};
uint32_t data_msb{(uint32_t)h2};
m_uncomp_humidity=data_msb | data_lsb;
}
/*!
* @brief This internal API is used to compensate the raw pressure data and
* return the compensated pressure data in double data type.
* @return Compensated pressure data.
* @retval Compensated pressure data in double.
*/
void compensate_pressure();
/*!
* @brief This internal API is used to compensate the raw humidity data and
* return the compensated humidity data in double data type.
* @return Compensated humidity data.
* @retval Compensated humidity data in double.
*/
void compensate_humidity();
/*!
* @brief This internal API is used to compensate the raw temperature data and
* return the compensated temperature data in double data type.
* @return Compensated temperature data.
* @retval Compensated temperature data in double.
*/
void compensate_temperature();
private:
calib_data m_calib_data;
#ifdef BME280_FLOAT_ENABLE
/*! Compensated pressure */
double m_pressure;
/*! Compensated temperature */
double m_temperature;
/*! Compensated humidity */
double m_humidity;
#else
/*! Compensated pressure */
uint32_t m_pressure;
/*! Compensated temperature */
int32_t m_temperature;
/*! Compensated humidity */
uint32_t m_humidity;
#endif /* BME280_USE_FLOATING_POINT */
/*! un-compensated pressure */
uint32_t m_uncomp_pressure;
/*! un-compensated temperature */
uint32_t m_uncomp_temperature;
/*! un-compensated humidity */
uint32_t m_uncomp_humidity;
};
#endif