diff options
author | HampusM <hampus@hampusmat.com> | 2022-03-07 09:24:37 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-03-07 09:26:17 +0100 |
commit | 4b4605df15ce7061a08d7911069927bf49778d05 (patch) | |
tree | 5f853e2d7508e073bd12175a7d18ab9e6bf2ea82 | |
parent | faa501905e2fb554a2444b5e396d9e979ce0be0e (diff) |
fix: prevent invalid UniquePtr usage
-rw-r--r-- | src/gyronardo.cpp | 31 | ||||
-rw-r--r-- | src/sensor/calibration.cpp | 28 | ||||
-rw-r--r-- | src/sensor/calibration.hpp | 5 | ||||
-rw-r--r-- | src/std/memory.hpp | 12 | ||||
-rw-r--r-- | src/std/memory.tpp | 19 |
5 files changed, 39 insertions, 56 deletions
diff --git a/src/gyronardo.cpp b/src/gyronardo.cpp index 148a21b..63b4bfc 100644 --- a/src/gyronardo.cpp +++ b/src/gyronardo.cpp @@ -16,17 +16,14 @@ constexpr unsigned int BAUD_RATE = 9600U; constexpr unsigned int SENSOR_RETRY_TIME = 2000U; SerialStream sout(Serial_(), BAUD_RATE); -// SerialStream sout(Serial, BAUD_RATE); -UniquePtr<Sensor> sensor; +auto sensor = Sensor(SENSOR_ADDRESS, Wire, sout, SENSOR_THROTTLE_TIME); void setup() { sout.waitReady(); - sensor = make_unique<Sensor>(SENSOR_ADDRESS, Wire, sout, SENSOR_THROTTLE_TIME); - - while (!sensor->begin()) + while (!sensor.begin()) { sout << "Error: Could not connect to the sensor. Retrying after 2000 " "milliseconds..." @@ -35,18 +32,18 @@ void setup() delay(SENSOR_RETRY_TIME); } - if (!sensor->setAccelSensitivity(2)) // 8g + if (!sensor.setAccelSensitivity(2)) // 8g { sout << "Error: Failed to set the sensor's accelerometer sensitivity. Status: " - << static_cast<int>(sensor->getStatus()) << endl; + << static_cast<int>(sensor.getStatus()) << endl; stop(); } - if (!sensor->setGyroSensitivity(1)) // 500 degrees/s + if (!sensor.setGyroSensitivity(1)) // 500 degrees/s { sout << "Error: Failed to set the sensor's gyro sensitivity. Status: " - << static_cast<int>(sensor->getStatus()) << endl; + << static_cast<int>(sensor.getStatus()) << endl; stop(); } @@ -66,17 +63,17 @@ void setup() sout << "Finished calibrating sensor\n"; sout << "Calibration values:\n" - << "Accelerometer X: " << sensor->accel_cal_x << "\n" - << "Accelerometer Y: " << sensor->accel_cal_y << "\n" - << "Accelerometer Z: " << sensor->accel_cal_z << "\n" - << "Gyro X: " << sensor->gyro_cal_x << "\n" - << "Gyro Y: " << sensor->gyro_cal_y << "\n" - << "Gyro Z: " << sensor->gyro_cal_z << "\n"; + << "Accelerometer X: " << sensor.accel_cal_x << "\n" + << "Accelerometer Y: " << sensor.accel_cal_y << "\n" + << "Accelerometer Z: " << sensor.accel_cal_z << "\n" + << "Gyro X: " << sensor.gyro_cal_x << "\n" + << "Gyro Y: " << sensor.gyro_cal_y << "\n" + << "Gyro Z: " << sensor.gyro_cal_z << "\n"; sout << "Starting..." << endl; - sout << "Pitch: " << sensor->getPitch() << " " - << "Roll: " << sensor->getRoll() << endl; + sout << "Pitch: " << sensor.getPitch() << " " + << "Roll: " << sensor.getRoll() << endl; } void loop() diff --git a/src/sensor/calibration.cpp b/src/sensor/calibration.cpp index 1538baa..42f5010 100644 --- a/src/sensor/calibration.cpp +++ b/src/sensor/calibration.cpp @@ -3,7 +3,7 @@ #include "std/time.hpp" #include "utils.hpp" -SensorCalibrator::SensorCalibrator(UniquePtr<Sensor> sensor, SerialStream sout) +SensorCalibrator::SensorCalibrator(Sensor sensor, SerialStream sout) : _sensor(sensor), _sout(sout) { } @@ -51,26 +51,26 @@ bool SensorCalibrator::calibrate(unsigned int throttle_time) void SensorCalibrator::_updateValues(SensorCalibratorValues &values) { - _sensor->read(); + _sensor.read(); - values.accel_x -= _sensor->getAccelX(); - values.accel_y -= _sensor->getAccelY(); - values.accel_z -= _sensor->getAccelZ(); + values.accel_x -= _sensor.getAccelX(); + values.accel_y -= _sensor.getAccelY(); + values.accel_z -= _sensor.getAccelZ(); - values.gyro_x -= _sensor->getGyroX(); - values.gyro_y -= _sensor->getGyroY(); - values.gyro_z -= _sensor->getGyroZ(); + values.gyro_x -= _sensor.getGyroX(); + values.gyro_y -= _sensor.getGyroY(); + values.gyro_z -= _sensor.getGyroZ(); } void SensorCalibrator::_adjustCalibrationWithValues(const SensorCalibratorValues &values) { - _sensor->accel_cal_x += values.accel_x; - _sensor->accel_cal_y += values.accel_y; - _sensor->accel_cal_z += values.accel_z; + _sensor.accel_cal_x += values.accel_x; + _sensor.accel_cal_y += values.accel_y; + _sensor.accel_cal_z += values.accel_z; - _sensor->gyro_cal_x += values.gyro_x; - _sensor->gyro_cal_y += values.gyro_y; - _sensor->gyro_cal_z += values.gyro_z; + _sensor.gyro_cal_x += values.gyro_x; + _sensor.gyro_cal_y += values.gyro_y; + _sensor.gyro_cal_z += values.gyro_z; } void SensorCalibrator::_adjustValues(SensorCalibratorValues &values) diff --git a/src/sensor/calibration.hpp b/src/sensor/calibration.hpp index a2da58b..090fd27 100644 --- a/src/sensor/calibration.hpp +++ b/src/sensor/calibration.hpp @@ -2,7 +2,6 @@ #include "sensor/sensor.hpp" #include "serial.hpp" -#include "std/memory.hpp" // Calibration precision constexpr float ACCEL_CAL_X_MAX = 0.006; @@ -52,7 +51,7 @@ public: * @param sensor A sensor to calibrate * @param sout A Serial output stream */ - SensorCalibrator(UniquePtr<Sensor> sensor, SerialStream sout); + SensorCalibrator(Sensor sensor, SerialStream sout); /** * Calibrates the sensor. @@ -70,7 +69,7 @@ private: static void _adjustValues(SensorCalibratorValues &values); static bool _isValuesInRange(const SensorCalibratorValues &values); - UniquePtr<Sensor> _sensor; + Sensor _sensor; SerialStream _sout; }; diff --git a/src/std/memory.hpp b/src/std/memory.hpp index 0c5719c..d1ca762 100644 --- a/src/std/memory.hpp +++ b/src/std/memory.hpp @@ -11,13 +11,19 @@ class UniquePtr public: explicit UniquePtr() = default; explicit UniquePtr(Target *target); - UniquePtr(const UniquePtr &unique_ptr); - UniquePtr(UniquePtr &&unique_ptr) noexcept; - UniquePtr &operator=(const UniquePtr &unique_ptr); + // Move constructor + UniquePtr(UniquePtr &&unique_ptr) noexcept; + // Move assignment operator UniquePtr &operator=(UniquePtr &&unique_ptr) noexcept; + // Disable the copy constructor + UniquePtr(const UniquePtr &unique_ptr) = delete; + + // Disable the copy assignment operator + UniquePtr &operator=(const UniquePtr &unique_ptr) = delete; + ~UniquePtr(); Target operator*() const; diff --git a/src/std/memory.tpp b/src/std/memory.tpp index fdfe72b..b2f39bf 100644 --- a/src/std/memory.tpp +++ b/src/std/memory.tpp @@ -27,12 +27,6 @@ UniquePtr<Target>::UniquePtr(Target *target) : _target(target) } template <class Target> -UniquePtr<Target>::UniquePtr(const UniquePtr &unique_ptr) - : _target(new Target(*(unique_ptr._target))) -{ -} - -template <class Target> UniquePtr<Target>::UniquePtr(UniquePtr &&unique_ptr) noexcept : _target(unique_ptr._target) { @@ -40,19 +34,6 @@ UniquePtr<Target>::UniquePtr(UniquePtr &&unique_ptr) noexcept } template <class Target> -UniquePtr<Target> &UniquePtr<Target>::operator=(const UniquePtr &unique_ptr) -{ - if (&unique_ptr != this) - { - delete _target; - _target = nullptr; - _target = new Target(*(unique_ptr._target)); - } - - return *this; -} - -template <class Target> UniquePtr<Target> &UniquePtr<Target>::operator=(UniquePtr &&unique_ptr) noexcept { if (&unique_ptr != this) |