This is an automated email from the ASF dual-hosted git repository. fgerlits pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit ae0e71df83b1759fec2a52f6eb5c3a9cbbf8e496 Author: Adam Markovics <[email protected]> AuthorDate: Mon Oct 11 11:03:55 2021 +0200 MINIFICPP-1664 - Unnecessary RTIMULib.ini file is created Signed-off-by: Ferenc Gerlits <[email protected]> This closes #1198 --- extensions/sensors/GetEnvironmentalSensors.cpp | 8 +++---- extensions/sensors/GetMovementSensors.cpp | 4 ++-- extensions/sensors/SensorBase.cpp | 31 ++++++++------------------ extensions/sensors/SensorBase.h | 12 +++------- 4 files changed, 18 insertions(+), 37 deletions(-) diff --git a/extensions/sensors/GetEnvironmentalSensors.cpp b/extensions/sensors/GetEnvironmentalSensors.cpp index 194596c..900095f 100644 --- a/extensions/sensors/GetEnvironmentalSensors.cpp +++ b/extensions/sensors/GetEnvironmentalSensors.cpp @@ -68,14 +68,14 @@ void GetEnvironmentalSensors::initialize() { void GetEnvironmentalSensors::onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &sessionFactory) { SensorBase::onSchedule(context, sessionFactory); - humidity_sensor_ = RTHumidity::createHumidity(&settings); + humidity_sensor_ = RTHumidity::createHumidity(&settings_.value()); if (humidity_sensor_) { humidity_sensor_->humidityInit(); } else { throw std::runtime_error("RTHumidity could not be initialized"); } - pressure_sensor_ = RTPressure::createPressure(&settings); + pressure_sensor_ = RTPressure::createPressure(&settings_.value()); if (pressure_sensor_) { pressure_sensor_->pressureInit(); } else { @@ -93,8 +93,8 @@ GetEnvironmentalSensors::~GetEnvironmentalSensors() = default; void GetEnvironmentalSensors::onTrigger(const std::shared_ptr<core::ProcessContext>& /*context*/, const std::shared_ptr<core::ProcessSession>& session) { auto flow_file_ = session->create(); - if (imu->IMURead()) { - RTIMU_DATA imuData = imu->getIMUData(); + if (imu_->IMURead()) { + RTIMU_DATA imuData = imu_->getIMUData(); auto vector = imuData.accel; std::string degrees = RTMath::displayDegrees("acceleration", vector); flow_file_->addAttribute("ACCELERATION", degrees); diff --git a/extensions/sensors/GetMovementSensors.cpp b/extensions/sensors/GetMovementSensors.cpp index 5a971c8..7e15f1a 100644 --- a/extensions/sensors/GetMovementSensors.cpp +++ b/extensions/sensors/GetMovementSensors.cpp @@ -67,8 +67,8 @@ GetMovementSensors::~GetMovementSensors() = default; void GetMovementSensors::onTrigger(const std::shared_ptr<core::ProcessContext>& /*context*/, const std::shared_ptr<core::ProcessSession>& session) { auto flow_file_ = session->create(); - if (imu->IMURead()) { - RTIMU_DATA imuData = imu->getIMUData(); + if (imu_->IMURead()) { + RTIMU_DATA imuData = imu_->getIMUData(); if (imuData.accelValid) { auto vector = imuData.accel; diff --git a/extensions/sensors/SensorBase.cpp b/extensions/sensors/SensorBase.cpp index fb93a97..b2d29bd 100644 --- a/extensions/sensors/SensorBase.cpp +++ b/extensions/sensors/SensorBase.cpp @@ -16,28 +16,11 @@ * limitations under the License. */ #include <memory> -#include <algorithm> -#include <cctype> -#include <cstdint> -#include <cstring> -#include <iostream> -#include <iterator> -#include <map> #include <set> -#include <string> -#include <utility> -#include <vector> -#include "utils/ByteArrayCallback.h" -#include "core/FlowFile.h" -#include "core/logging/Logger.h" #include "core/ProcessContext.h" #include "core/Relationship.h" #include "SensorBase.h" -#include "io/BufferStream.h" -#include "io/StreamFactory.h" -#include "ResourceClaim.h" -#include "utils/StringUtils.h" namespace org { namespace apache { @@ -51,11 +34,15 @@ void SensorBase::initialize() { } void SensorBase::onSchedule(const std::shared_ptr<core::ProcessContext>& /*context*/, const std::shared_ptr<core::ProcessSessionFactory>& /*sessionFactory*/) { - imu = std::unique_ptr<RTIMU>(RTIMU::createIMU(&settings)); - if (imu) { - imu->IMUInit(); - imu->setGyroEnable(true); - imu->setAccelEnable(true); + // Deferred instantiation of RTIMUSettings, because it can create a file "RTIMULib.ini" in the working directory. + // SensorBase is instantiated when creating the manifest. + settings_ = std::make_optional<RTIMUSettings>(); + + imu_ = std::unique_ptr<RTIMU>(RTIMU::createIMU(&settings_.value())); + if (imu_) { + imu_->IMUInit(); + imu_->setGyroEnable(true); + imu_->setAccelEnable(true); } else { throw std::runtime_error("RTIMU could not be initialized"); } diff --git a/extensions/sensors/SensorBase.h b/extensions/sensors/SensorBase.h index 84bfb58..d050174 100644 --- a/extensions/sensors/SensorBase.h +++ b/extensions/sensors/SensorBase.h @@ -18,17 +18,12 @@ #pragma once #include <memory> -#include <regex> #include <string> #include <utility> -#include "utils/ByteArrayCallback.h" -#include "FlowFileRecord.h" #include "core/Processor.h" #include "core/ProcessSession.h" -#include "core/Core.h" -#include "core/Property.h" -#include "utils/Id.h" +#include "io/StreamPipe.h" #include "RTIMULib.h" #include "RTMath.h" @@ -47,7 +42,6 @@ class SensorBase : public core::Processor { */ explicit SensorBase(const std::string& name, const utils::Identifier& uuid = {}) : Processor(name, uuid), - imu(nullptr), logger_(logging::LoggerFactory<SensorBase>::getLogger()) { } // Destructor @@ -74,8 +68,8 @@ class SensorBase : public core::Processor { }; protected: - RTIMUSettings settings; - std::unique_ptr<RTIMU> imu; + std::optional<RTIMUSettings> settings_; + std::unique_ptr<RTIMU> imu_; std::shared_ptr<logging::Logger> logger_; };
