Converted to C++ and esp-idf

This commit is contained in:
2021-07-13 14:22:32 +02:00
parent 5fe2dffc3d
commit 531b734469
3 changed files with 65 additions and 28 deletions

View File

@@ -41,6 +41,8 @@
#include <limits.h> #include <limits.h>
#include <math.h> #include <math.h>
#include <espchrono.h>
#include "Adafruit_BMP085_U.h" #include "Adafruit_BMP085_U.h"
static bmp085_calib_data static bmp085_calib_data
@@ -253,9 +255,10 @@ Adafruit_BMP085_Unified::Adafruit_BMP085_Unified(int32_t sensorID) {
@brief Setups the HW @brief Setups the HW
*/ */
/**************************************************************************/ /**************************************************************************/
bool Adafruit_BMP085_Unified::begin(bmp085_mode_t mode) { bool Adafruit_BMP085_Unified::begin(bool skipWireBegin, bmp085_mode_t mode) {
// Enable I2C // Enable I2C
Wire.begin(); if (!skipWireBegin)
Wire.begin();
/* Mode boundary check */ /* Mode boundary check */
if ((mode > BMP085_MODE_ULTRAHIGHRES) || (mode < 0)) { if ((mode > BMP085_MODE_ULTRAHIGHRES) || (mode < 0)) {
@@ -440,20 +443,21 @@ float Adafruit_BMP085_Unified::seaLevelForAltitude(float altitude,
@brief Provides the sensor_t data for this sensor @brief Provides the sensor_t data for this sensor
*/ */
/**************************************************************************/ /**************************************************************************/
void Adafruit_BMP085_Unified::getSensor(sensor_t *sensor) { sensor_t Adafruit_BMP085_Unified::getSensor() {
/* Clear the sensor_t object */ sensor_t sensor;
memset(sensor, 0, sizeof(sensor_t));
/* Insert the sensor name in the fixed length char array */ /* Insert the sensor name in the fixed length char array */
strncpy(sensor->name, "BMP085", sizeof(sensor->name) - 1); strncpy(sensor.name, "BMP085", sizeof(sensor.name) - 1);
sensor->name[sizeof(sensor->name) - 1] = 0; sensor.name[sizeof(sensor.name) - 1] = 0;
sensor->version = 1;
sensor->sensor_id = _sensorID; sensor.version = 1;
sensor->type = SENSOR_TYPE_PRESSURE; sensor.sensor_id = _sensorID;
sensor->min_delay = 0; sensor.type = SENSOR_TYPE_PRESSURE;
sensor->max_value = 1100.0F; // 300..1100 hPa sensor.min_delay = 0;
sensor->min_value = 300.0F; sensor.max_value = 1100.0F; // 300..1100 hPa
sensor->resolution = 0.01F; // Datasheet states 0.01 hPa resolution sensor.min_value = 300.0F;
sensor.resolution = 0.01F; // Datasheet states 0.01 hPa resolution
return sensor;
} }
/**************************************************************************/ /**************************************************************************/
@@ -461,18 +465,19 @@ void Adafruit_BMP085_Unified::getSensor(sensor_t *sensor) {
@brief Reads the sensor and returns the data as a sensors_event_t @brief Reads the sensor and returns the data as a sensors_event_t
*/ */
/**************************************************************************/ /**************************************************************************/
bool Adafruit_BMP085_Unified::getEvent(sensors_event_t *event) { std::optional<sensors_event_t> Adafruit_BMP085_Unified::getEvent() {
float pressure_kPa; sensors_event_t event;
/* Clear the event */ event.version = sizeof(sensors_event_t);
memset(event, 0, sizeof(sensors_event_t)); event.sensor_id = _sensorID;
event.type = SENSOR_TYPE_PRESSURE;
event.timestamp = espchrono::millis_clock::now();
event->version = sizeof(sensors_event_t); {
event->sensor_id = _sensorID; float pressure_kPa;
event->type = SENSOR_TYPE_PRESSURE; getPressure(&pressure_kPa);
event->timestamp = 0; event.pressure = pressure_kPa / 100.0F;
getPressure(&pressure_kPa); }
event->pressure = pressure_kPa / 100.0F;
return true; return event;
} }

View File

@@ -93,7 +93,7 @@ public:
* @param mode Mode to set, ultra high-res by default * @param mode Mode to set, ultra high-res by default
* @return Returns true if successful * @return Returns true if successful
*/ */
bool begin(bmp085_mode_t mode = BMP085_MODE_ULTRAHIGHRES); bool begin(bool skipWireBegin = false, bmp085_mode_t mode = BMP085_MODE_ULTRAHIGHRES);
/*! /*!
* @brief Gets the temperature over I2C from the BMP085 * @brief Gets the temperature over I2C from the BMP085
* @param temp Temperature * @param temp Temperature
@@ -143,8 +143,8 @@ public:
* @brief Used to read the sensor * @brief Used to read the sensor
* @return Returns an event * @return Returns an event
*/ */
bool getEvent(sensors_event_t *); std::optional<sensors_event_t> getEvent() override;
void getSensor(sensor_t *); sensor_t getSensor() override;
private: private:
int32_t computeB5(int32_t ut); int32_t computeB5(int32_t ut);

32
CMakeLists.txt Normal file
View File

@@ -0,0 +1,32 @@
set(headers
Adafruit_BMP085_U.h
)
set(sources
Adafruit_BMP085_U.cpp
)
set(dependencies
arduino-esp32
Adafruit_Sensor
)
idf_component_register(
INCLUDE_DIRS
.
SRCS
${headers}
${sources}
REQUIRES
${dependencies}
)
target_compile_options(${COMPONENT_TARGET}
PRIVATE
-fstack-reuse=all
-fstack-protector-all
-Wno-unused-function
-Wno-deprecated-declarations
-Wno-missing-field-initializers
-Wno-parentheses
)