diff --git a/Adafruit_BMP085_U.cpp b/Adafruit_BMP085_U.cpp index 11f837e..6544e33 100644 --- a/Adafruit_BMP085_U.cpp +++ b/Adafruit_BMP085_U.cpp @@ -41,6 +41,8 @@ #include #include +#include + #include "Adafruit_BMP085_U.h" static bmp085_calib_data @@ -253,9 +255,10 @@ Adafruit_BMP085_Unified::Adafruit_BMP085_Unified(int32_t sensorID) { @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 - Wire.begin(); + if (!skipWireBegin) + Wire.begin(); /* Mode boundary check */ 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 */ /**************************************************************************/ -void Adafruit_BMP085_Unified::getSensor(sensor_t *sensor) { - /* Clear the sensor_t object */ - memset(sensor, 0, sizeof(sensor_t)); +sensor_t Adafruit_BMP085_Unified::getSensor() { + sensor_t sensor; /* Insert the sensor name in the fixed length char array */ - strncpy(sensor->name, "BMP085", sizeof(sensor->name) - 1); - sensor->name[sizeof(sensor->name) - 1] = 0; - sensor->version = 1; - sensor->sensor_id = _sensorID; - sensor->type = SENSOR_TYPE_PRESSURE; - sensor->min_delay = 0; - sensor->max_value = 1100.0F; // 300..1100 hPa - sensor->min_value = 300.0F; - sensor->resolution = 0.01F; // Datasheet states 0.01 hPa resolution + strncpy(sensor.name, "BMP085", sizeof(sensor.name) - 1); + sensor.name[sizeof(sensor.name) - 1] = 0; + + sensor.version = 1; + sensor.sensor_id = _sensorID; + sensor.type = SENSOR_TYPE_PRESSURE; + sensor.min_delay = 0; + sensor.max_value = 1100.0F; // 300..1100 hPa + 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 */ /**************************************************************************/ -bool Adafruit_BMP085_Unified::getEvent(sensors_event_t *event) { - float pressure_kPa; +std::optional Adafruit_BMP085_Unified::getEvent() { + sensors_event_t event; - /* Clear the event */ - memset(event, 0, sizeof(sensors_event_t)); + event.version = 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; - event->type = SENSOR_TYPE_PRESSURE; - event->timestamp = 0; - getPressure(&pressure_kPa); - event->pressure = pressure_kPa / 100.0F; + { + float pressure_kPa; + getPressure(&pressure_kPa); + event.pressure = pressure_kPa / 100.0F; + } - return true; + return event; } diff --git a/Adafruit_BMP085_U.h b/Adafruit_BMP085_U.h index 6ba2fd7..2c35273 100644 --- a/Adafruit_BMP085_U.h +++ b/Adafruit_BMP085_U.h @@ -93,7 +93,7 @@ public: * @param mode Mode to set, ultra high-res by default * @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 * @param temp Temperature @@ -143,8 +143,8 @@ public: * @brief Used to read the sensor * @return Returns an event */ - bool getEvent(sensors_event_t *); - void getSensor(sensor_t *); + std::optional getEvent() override; + sensor_t getSensor() override; private: int32_t computeB5(int32_t ut); diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..326c55a --- /dev/null +++ b/CMakeLists.txt @@ -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 +)