From 499c551dcb1a9a0b31ed3c1856115e009ba580ea Mon Sep 17 00:00:00 2001 From: GOB Date: Mon, 16 Sep 2024 16:50:20 +0900 Subject: [PATCH] Refactoring of some APIs and add doxygen comments --- src/unit/unit_ADS1113.cpp | 9 ++-- src/unit/unit_ADS1113.hpp | 3 +- src/unit/unit_ADS1114.cpp | 10 +++-- src/unit/unit_ADS1114.hpp | 3 +- src/unit/unit_ADS1115.cpp | 10 +++-- src/unit/unit_ADS1115.hpp | 6 ++- src/unit/unit_ADS111x.cpp | 13 +----- src/unit/unit_ADS111x.hpp | 68 ++++++++++++++++++------------ test/embedded/avmeter_template.hpp | 3 +- 9 files changed, 72 insertions(+), 53 deletions(-) diff --git a/src/unit/unit_ADS1113.cpp b/src/unit/unit_ADS1113.cpp index 2dccc1c..1e87bad 100644 --- a/src/unit/unit_ADS1113.cpp +++ b/src/unit/unit_ADS1113.cpp @@ -21,9 +21,12 @@ namespace unit { const char UnitADS1113::name[] = "UnitADS1113"; const types::uid_t UnitADS1113::uid{"UnitADS1113"_mmh3}; const types::uid_t UnitADS1113::attr{0}; -bool UnitADS1113::on_begin() { - M5_LIB_LOGV("mux, gain, and comp_que not support"); - return writeSamplingRate(_cfg.rate); + +bool UnitADS1113::start_periodic_measurement(const ads111x::Sampling rate, const ads111x::Mux, const ads111x::Gain, + const ads111x::ComparatorQueue) { + M5_LIB_LOGW("mux, gain, and comp_que not support"); + return writeSamplingRate(rate) && UnitADS111x::start_periodic_measurement(); } + } // namespace unit } // namespace m5 diff --git a/src/unit/unit_ADS1113.hpp b/src/unit/unit_ADS1113.hpp index 1175532..70048c3 100644 --- a/src/unit/unit_ADS1113.hpp +++ b/src/unit/unit_ADS1113.hpp @@ -56,7 +56,8 @@ class UnitADS1113 : public UnitADS111x { ///@} protected: - virtual bool on_begin() override; + virtual bool start_periodic_measurement(const ads111x::Sampling rate, const ads111x::Mux mux, + const ads111x::Gain gain, const ads111x::ComparatorQueue comp_que) override; }; } // namespace unit } // namespace m5 diff --git a/src/unit/unit_ADS1114.cpp b/src/unit/unit_ADS1114.cpp index e3aa0c5..4ff0610 100644 --- a/src/unit/unit_ADS1114.cpp +++ b/src/unit/unit_ADS1114.cpp @@ -21,9 +21,13 @@ namespace unit { const char UnitADS1114::name[] = "UnitADS1114"; const types::uid_t UnitADS1114::uid{"UnitADS1114"_mmh3}; const types::uid_t UnitADS1114::attr{0}; -bool UnitADS1114::on_begin() { - M5_LIB_LOGV("mux is not support"); - return writeSamplingRate(_cfg.rate) && writeGain(_cfg.gain) && writeComparatorQueue(_cfg.comp_que); + +bool UnitADS1114::start_periodic_measurement(const ads111x::Sampling rate, const ads111x::Mux, const ads111x::Gain gain, + const ads111x::ComparatorQueue comp_que) { + M5_LIB_LOGW("mux is not support"); + return writeSamplingRate(_cfg.rate) && writeGain(_cfg.gain) && writeComparatorQueue(_cfg.comp_que) && + UnitADS111x::start_periodic_measurement(); } + } // namespace unit } // namespace m5 diff --git a/src/unit/unit_ADS1114.hpp b/src/unit/unit_ADS1114.hpp index c88daa8..3d76aa5 100644 --- a/src/unit/unit_ADS1114.hpp +++ b/src/unit/unit_ADS1114.hpp @@ -56,7 +56,8 @@ class UnitADS1114 : public UnitADS111x { ///@} protected: - virtual bool on_begin() override; + virtual bool start_periodic_measurement(const ads111x::Sampling rate, const ads111x::Mux mux, + const ads111x::Gain gain, const ads111x::ComparatorQueue comp_que) override; }; } // namespace unit } // namespace m5 diff --git a/src/unit/unit_ADS1115.cpp b/src/unit/unit_ADS1115.cpp index 103d5df..beaee21 100644 --- a/src/unit/unit_ADS1115.cpp +++ b/src/unit/unit_ADS1115.cpp @@ -27,9 +27,10 @@ namespace unit { const char UnitADS1115::name[] = "UnitADS1115"; const types::uid_t UnitADS1115::uid{"UnitADS1115"_mmh3}; const types::uid_t UnitADS1115::attr{0}; -bool UnitADS1115::on_begin() { +bool UnitADS1115::start_periodic_measurement(const ads111x::Sampling rate, const ads111x::Mux mux, + const ads111x::Gain gain, const ads111x::ComparatorQueue comp_que) { return writeSamplingRate(_cfg.rate) && writeMultiplexer(_cfg.mux) && writeGain(_cfg.gain) && - writeComparatorQueue(_cfg.comp_que); + writeComparatorQueue(_cfg.comp_que) && UnitADS111x::start_periodic_measurement(); } // class UnitAVmeterBase @@ -46,7 +47,7 @@ UnitAVmeterBase::UnitAVmeterBase(const uint8_t addr, const uint8_t eepromAddr) _valid = add(_eeprom, 0) && m5::utility::isValidI2CAddress(_eeprom.address()); } -bool UnitAVmeterBase::on_begin() { +bool UnitAVmeterBase::begin() { if (!validChild()) { M5_LIB_LOGE("Child unit is invalid %x", _eeprom.address()); return false; @@ -55,7 +56,8 @@ bool UnitAVmeterBase::on_begin() { return false; } apply_calibration(_ads_cfg.pga()); - return UnitADS1115::on_begin(); + + return UnitADS111x::begin(); } bool UnitAVmeterBase::writeGain(const ads111x::Gain gain) { diff --git a/src/unit/unit_ADS1115.hpp b/src/unit/unit_ADS1115.hpp index f0cc535..5387bd6 100644 --- a/src/unit/unit_ADS1115.hpp +++ b/src/unit/unit_ADS1115.hpp @@ -57,7 +57,8 @@ class UnitADS1115 : public UnitADS111x { ///@} protected: - virtual bool on_begin() override; + virtual bool start_periodic_measurement(const ads111x::Sampling rate, const ads111x::Mux mux, + const ads111x::Gain gain, const ads111x::ComparatorQueue comp_que) override; }; /*! @@ -72,6 +73,8 @@ class UnitAVmeterBase : public UnitADS1115 { virtual ~UnitAVmeterBase() { } + virtual bool begin(); + inline float calibrationFactor() const { return _calibrationFactor; } @@ -80,7 +83,6 @@ class UnitAVmeterBase : public UnitADS1115 { protected: virtual Adapter* duplicate_adapter(const uint8_t ch) override; - virtual bool on_begin() override; void apply_calibration(const ads111x::Gain gain); bool validChild() const { return _valid; diff --git a/src/unit/unit_ADS111x.cpp b/src/unit/unit_ADS111x.cpp index 84fd68c..c19e089 100644 --- a/src/unit/unit_ADS111x.cpp +++ b/src/unit/unit_ADS111x.cpp @@ -70,12 +70,6 @@ bool UnitADS111x::begin() { return false; } - // Processing of the derived class - if (!on_begin()) { - M5_LIB_LOGE("Failed to on_begin in derived class"); - return false; - } - if (!read_config(_ads_cfg)) { M5_LIB_LOGE("Failed to get config"); return false; @@ -83,7 +77,8 @@ bool UnitADS111x::begin() { apply_interval(_ads_cfg.dr()); apply_coefficient(_ads_cfg.pga()); - return _cfg.start_periodic ? startPeriodicMeasurement() : stopPeriodicMeasurement(); + return _cfg.start_periodic ? startPeriodicMeasurement(_cfg.rate, _cfg.mux, _cfg.gain, _cfg.comp_que) + : stopPeriodicMeasurement(); } void UnitADS111x::update(const bool force) { @@ -136,10 +131,6 @@ bool UnitADS111x::start_periodic_measurement() { return false; } -bool UnitADS111x::start_periodic_measurement(const ads111x::Sampling rate) { - return !inPeriodic() && writeSamplingRate(rate) && start_periodic_measurement(); -} - bool UnitADS111x::stop_periodic_measurement() { Config c{}; if (read_config(c)) { diff --git a/src/unit/unit_ADS111x.hpp b/src/unit/unit_ADS111x.hpp index 932fa55..6f6c59c 100644 --- a/src/unit/unit_ADS111x.hpp +++ b/src/unit/unit_ADS111x.hpp @@ -71,8 +71,7 @@ enum class Sampling : uint8_t { /*! @enum ComparatorQueue - @brief the value determines the number of successive conversions exceeding the - upper orlower threshold required + @brief the value determines the number of successive conversions exceeding the upper orlower threshold required @warning This feature serve nofunction on the ADS1113 */ enum class ComparatorQueue : uint8_t { @@ -206,12 +205,16 @@ class UnitADS111x : public Component, public PeriodicMeasurementAdapter::startPeriodicMeasurement(); + } + /*! + @brief Start periodic measurement + @paraa rate Sampling rate + @param mux Input multiplexer (Not supported in some classes) + @param gain Programmable gain amplifier (Not supported in some classes) + @param comp_que Comparator queue (Not supported in some classes) + @return True if successful + */ + inline bool startPeriodicMeasurement(const ads111x::Sampling rate, const ads111x::Mux mux, const ads111x::Gain gain, + const ads111x::ComparatorQueue comp_que) { + return PeriodicMeasurementAdapter::startPeriodicMeasurement(rate, mux, gain, + comp_que); + } + /*! + @brief Stop periodic measurement + @return True if successful + */ + inline bool stopPeriodicMeasurement() { + return PeriodicMeasurementAdapter::stopPeriodicMeasurement(); + } + ///@} + ///@warning ADS1113, ADS1114 and ADS1115 differ in the items that can be set ///@name Configration ///@{ @@ -332,7 +366,7 @@ class UnitADS111x : public Component, public PeriodicMeasurementAdapterstartPeriodicMeasurement(rate)); + EXPECT_TRUE(unit->writeSamplingRate(rate)); + EXPECT_TRUE(unit->startPeriodicMeasurement()); EXPECT_TRUE(unit->inPeriodic()); test_periodic_measurement(unit.get(), 4, check_measurement_values);