Skip to content

Commit

Permalink
Refactoring of some APIs and add doxygen comments
Browse files Browse the repository at this point in the history
  • Loading branch information
GOB52 committed Sep 16, 2024
1 parent d42e305 commit 499c551
Show file tree
Hide file tree
Showing 9 changed files with 72 additions and 53 deletions.
9 changes: 6 additions & 3 deletions src/unit/unit_ADS1113.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 2 additions & 1 deletion src/unit/unit_ADS1113.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 7 additions & 3 deletions src/unit/unit_ADS1114.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 2 additions & 1 deletion src/unit/unit_ADS1114.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 6 additions & 4 deletions src/unit/unit_ADS1115.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand All @@ -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) {
Expand Down
6 changes: 4 additions & 2 deletions src/unit/unit_ADS1115.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

/*!
Expand All @@ -72,6 +73,8 @@ class UnitAVmeterBase : public UnitADS1115 {
virtual ~UnitAVmeterBase() {
}

virtual bool begin();

inline float calibrationFactor() const {
return _calibrationFactor;
}
Expand All @@ -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;
Expand Down
13 changes: 2 additions & 11 deletions src/unit/unit_ADS111x.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,20 +70,15 @@ 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;
}
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) {
Expand Down Expand Up @@ -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)) {
Expand Down
68 changes: 41 additions & 27 deletions src/unit/unit_ADS111x.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -206,12 +205,16 @@ class UnitADS111x : public Component, public PeriodicMeasurementAdapter<UnitADS1
@struct config_t
@brief Settings for begin
*/
struct config_t : public Component::config_t {
struct config_t {
//! Start periodic measurement on begin?
bool start_periodic{true};
//! sampling rate if start on begin
ads111x::Sampling rate{ads111x::Sampling::Rate128};
// The following items are not supported by some classes
//! Mux if start on begin (Not supported in some classes)
ads111x::Mux mux{ads111x::Mux::AIN_01};
//! Gain if start on begin (Not supported in some classes)
ads111x::Gain gain{ads111x::Gain::PGA_2048};
//! ComparatorQueue if start on begin (Not supported in some classes)
ads111x::ComparatorQueue comp_que{ads111x::ComparatorQueue::Disable};
};

Expand Down Expand Up @@ -258,6 +261,37 @@ class UnitADS111x : public Component, public PeriodicMeasurementAdapter<UnitADS1
}
///@}

///@name Periodic measurement
///@{
/*!
@brief Start periodic measurement in the current settings
@return True if successful
*/
inline bool startPeriodicMeasurement() {
return PeriodicMeasurementAdapter<UnitADS111x, ads111x::Data>::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<UnitADS111x, ads111x::Data>::startPeriodicMeasurement(rate, mux, gain,
comp_que);
}
/*!
@brief Stop periodic measurement
@return True if successful
*/
inline bool stopPeriodicMeasurement() {
return PeriodicMeasurementAdapter<UnitADS111x, ads111x::Data>::stopPeriodicMeasurement();
}
///@}

///@warning ADS1113, ADS1114 and ADS1115 differ in the items that can be set
///@name Configration
///@{
Expand Down Expand Up @@ -332,7 +366,7 @@ class UnitADS111x : public Component, public PeriodicMeasurementAdapter<UnitADS1
@warning Until it can be measured, it will be blocked until the timeout
time
*/
bool measureSingleshot(ads111x::Data& d, const uint32_t timeoutMillis = 1000);
bool measureSingleshot(ads111x::Data& d, const uint32_t timeoutMillis = 1000U);
///@}

///@name Threshold
Expand Down Expand Up @@ -362,30 +396,10 @@ class UnitADS111x : public Component, public PeriodicMeasurementAdapter<UnitADS1
bool generalReset();

protected:
///@note Call via startPeriodicMeasurement/stopPeriodicMeasurement
///@name Periodic measurement
///@{
/*!
@brief Start periodic measurement
@details Measuring in the current settings
@return True if successful
*/
bool start_periodic_measurement();
/*!
@brief Start periodic measurement
@details Specify settings and measure
@param rate Data sampling rate
@return True if successful
*/
bool start_periodic_measurement(const ads111x::Sampling rate);
/*!
@brief Stop periodic measurement
@return True if successful
*/
virtual bool start_periodic_measurement(const ads111x::Sampling rate, const ads111x::Mux mux,
const ads111x::Gain gain, const ads111x::ComparatorQueue comp_que) = 0;
bool stop_periodic_measurement();
///@}

virtual bool on_begin() = 0; // Call in begin

bool read_adc_raw(ads111x::Data& d);
bool start_single_measurement();
Expand Down
3 changes: 2 additions & 1 deletion test/embedded/avmeter_template.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,8 @@ TEST_P(TestADS1115, Periodic) {
Sampling rate{};
std::tie(s, rate) = e;
SCOPED_TRACE(s);
EXPECT_TRUE(unit->startPeriodicMeasurement(rate));
EXPECT_TRUE(unit->writeSamplingRate(rate));
EXPECT_TRUE(unit->startPeriodicMeasurement());
EXPECT_TRUE(unit->inPeriodic());

test_periodic_measurement(unit.get(), 4, check_measurement_values);
Expand Down

0 comments on commit 499c551

Please sign in to comment.