diff --git a/.clang-format b/.clang-format index 5b9aa0a..079c44e 100644 --- a/.clang-format +++ b/.clang-format @@ -1,7 +1,7 @@ --- Language: Cpp BasedOnStyle: Google -AccessModifierOffset: -1 +AccessModifierOffset: -4 AlignAfterOpenBracket: Align AlignConsecutiveMacros: true AlignConsecutiveAssignments: true @@ -29,7 +29,7 @@ BraceWrapping: AfterClass: false AfterControlStatement: false AfterEnum: false - AfterFunction: false + AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false @@ -42,7 +42,7 @@ BraceWrapping: SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBinaryOperators: None -BreakBeforeBraces: Attach +BreakBeforeBraces: Custom BreakBeforeInheritanceComma: false BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true diff --git a/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp b/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp index 7978b21..087ce06 100644 --- a/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp +++ b/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp @@ -22,7 +22,8 @@ m5::unit::UnitKmeterISO unit; auto& lcd = M5.Display; } // namespace -void setup() { +void setup() +{ M5.begin(); m5::utility::delay(3000); @@ -71,7 +72,8 @@ void setup() { lcd.clear(TFT_DARKGREEN); } -void loop() { +void loop() +{ M5.update(); Units.update(); if (unit.updated()) { diff --git a/src/M5UnitKmeterISO.cpp b/src/M5UnitKmeterISO.cpp index d820f21..38d2a20 100644 --- a/src/M5UnitKmeterISO.cpp +++ b/src/M5UnitKmeterISO.cpp @@ -1,7 +1,8 @@ #include "M5UnitKmeterISO.h" #include -void M5UnitKmeterISO::writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length) { +void M5UnitKmeterISO::writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length) +{ _wire->beginTransmission(addr); _wire->write(reg); for (int i = 0; i < length; i++) { @@ -10,7 +11,8 @@ void M5UnitKmeterISO::writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uin _wire->endTransmission(); } -void M5UnitKmeterISO::readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length) { +void M5UnitKmeterISO::readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length) +{ uint8_t index = 0; _wire->beginTransmission(addr); _wire->write(reg); @@ -21,7 +23,8 @@ void M5UnitKmeterISO::readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint } } -bool M5UnitKmeterISO::begin(TwoWire *wire, uint8_t addr, uint8_t sda, uint8_t scl, uint32_t speed) { +bool M5UnitKmeterISO::begin(TwoWire *wire, uint8_t addr, uint8_t sda, uint8_t scl, uint32_t speed) +{ _wire = wire; _addr = addr; _sda = sda; @@ -38,70 +41,80 @@ bool M5UnitKmeterISO::begin(TwoWire *wire, uint8_t addr, uint8_t sda, uint8_t sc } } -int32_t M5UnitKmeterISO::getCelsiusTempValue(void) { +int32_t M5UnitKmeterISO::getCelsiusTempValue(void) +{ uint8_t read_buf[4] = {0}; readBytes(_addr, KMETER_TEMP_VAL_REG, read_buf, 4); return (read_buf[3] << 24) | (read_buf[2] << 16) | (read_buf[1] << 8) | read_buf[0]; } -int32_t M5UnitKmeterISO::getFahrenheitTempValue(void) { +int32_t M5UnitKmeterISO::getFahrenheitTempValue(void) +{ uint8_t read_buf[4] = {0}; readBytes(_addr, KMETER_TEMP_VAL_REG + 4, read_buf, 4); return (read_buf[3] << 24) | (read_buf[2] << 16) | (read_buf[1] << 8) | read_buf[0]; } -int32_t M5UnitKmeterISO::getInternalCelsiusTempValue(void) { +int32_t M5UnitKmeterISO::getInternalCelsiusTempValue(void) +{ uint8_t read_buf[4] = {0}; readBytes(_addr, KMETER_INTERNAL_TEMP_VAL_REG, read_buf, 4); return (read_buf[3] << 24) | (read_buf[2] << 16) | (read_buf[1] << 8) | read_buf[0]; } -int32_t M5UnitKmeterISO::getInternalFahrenheitTempValue(void) { +int32_t M5UnitKmeterISO::getInternalFahrenheitTempValue(void) +{ uint8_t read_buf[4] = {0}; readBytes(_addr, KMETER_INTERNAL_TEMP_VAL_REG + 4, read_buf, 4); return (read_buf[3] << 24) | (read_buf[2] << 16) | (read_buf[1] << 8) | read_buf[0]; } -void M5UnitKmeterISO::getCelsiusTempString(char *str) { +void M5UnitKmeterISO::getCelsiusTempString(char *str) +{ char read_buf[8] = {0}; readBytes(_addr, KMETER_TEMP_CELSIUS_STRING_REG, (uint8_t *)read_buf, 8); memcpy(str, read_buf, sizeof(read_buf)); } -void M5UnitKmeterISO::getFahrenheitTempString(char *str) { +void M5UnitKmeterISO::getFahrenheitTempString(char *str) +{ uint8_t read_buf[8] = {0}; readBytes(_addr, KMETER_TEMP_FAHRENHEIT_STRING_REG, (uint8_t *)read_buf, 8); memcpy(str, read_buf, sizeof(read_buf)); } -void M5UnitKmeterISO::getInternalCelsiusTempString(char *str) { +void M5UnitKmeterISO::getInternalCelsiusTempString(char *str) +{ uint8_t read_buf[8] = {0}; readBytes(_addr, KMETER_INTERNAL_TEMP_CELSIUS_STRING_REG, (uint8_t *)read_buf, 8); memcpy(str, read_buf, sizeof(read_buf)); } -void M5UnitKmeterISO::getInternalFahrenheitTempString(char *str) { +void M5UnitKmeterISO::getInternalFahrenheitTempString(char *str) +{ uint8_t read_buf[8] = {0}; readBytes(_addr, KMETER_INTERNAL_TEMP_FAHRENHEIT_STRING_REG, (uint8_t *)read_buf, 8); memcpy(str, read_buf, sizeof(read_buf)); } -uint8_t M5UnitKmeterISO::getReadyStatus(void) { +uint8_t M5UnitKmeterISO::getReadyStatus(void) +{ uint8_t read_buf[4] = {0}; readBytes(_addr, KMETER_KMETER_ERROR_STATUS_REG, read_buf, 1); return read_buf[0]; } -uint8_t M5UnitKmeterISO::getFirmwareVersion(void) { +uint8_t M5UnitKmeterISO::getFirmwareVersion(void) +{ uint8_t reg; uint8_t read_buf[4] = {0}; @@ -109,7 +122,8 @@ uint8_t M5UnitKmeterISO::getFirmwareVersion(void) { return read_buf[0]; } -bool M5UnitKmeterISO::setI2CAddress(uint8_t addr) { +bool M5UnitKmeterISO::setI2CAddress(uint8_t addr) +{ _wire->beginTransmission(_addr); _wire->write(KMETER_I2C_ADDRESS_REG); _wire->write(addr); diff --git a/src/M5UnitUnifiedKmeterISO.hpp b/src/M5UnitUnifiedKmeterISO.hpp index 147c8be..55ed4d0 100644 --- a/src/M5UnitUnifiedKmeterISO.hpp +++ b/src/M5UnitUnifiedKmeterISO.hpp @@ -29,6 +29,7 @@ namespace m5 { @namespace unit @brief Unit-related namespace */ -namespace unit {} // namespace unit +namespace unit { +} // namespace unit } // namespace m5 #endif diff --git a/src/unit/unit_KmeterISO.cpp b/src/unit/unit_KmeterISO.cpp index 3b6e650..08f83dc 100644 --- a/src/unit/unit_KmeterISO.cpp +++ b/src/unit/unit_KmeterISO.cpp @@ -19,7 +19,8 @@ using namespace m5::unit::kmeterISO::command; namespace { template -T array_to_type(const std::array& a) { +T array_to_type(const std::array& a) +{ static_assert(std::is_integral::value && sizeof(T) == 4, "Invalid type"); return static_cast((((uint32_t)a[3]) << 24) | (((uint32_t)a[2]) << 16) | (((uint32_t)a[1]) << 8) | (((uint32_t)a[0]) << 0)); @@ -44,7 +45,8 @@ const char UnitKmeterISO::name[] = "UnitKmeterISO"; const types::uid_t UnitKmeterISO::uid{"UnitKmeterISO"_mmh3}; const types::uid_t UnitKmeterISO::attr{0}; -bool UnitKmeterISO::begin() { +bool UnitKmeterISO::begin() +{ auto ssize = stored_size(); assert(ssize && "stored_size must be greater than zero"); if (ssize != _data->capacity()) { @@ -63,7 +65,8 @@ bool UnitKmeterISO::begin() { return _cfg.start_periodic ? startPeriodicMeasurement(_cfg.interval, _cfg.measurement_unit) : true; } -void UnitKmeterISO::update(const bool force) { +void UnitKmeterISO::update(const bool force) +{ _updated = false; if (inPeriodic()) { elapsed_time_t at{m5::utility::millis()}; @@ -78,7 +81,8 @@ void UnitKmeterISO::update(const bool force) { } } -bool UnitKmeterISO::start_periodic_measurement() { +bool UnitKmeterISO::start_periodic_measurement() +{ if (inPeriodic()) { M5_LIB_LOGD("Periodic measurements are running"); return false; @@ -88,7 +92,8 @@ bool UnitKmeterISO::start_periodic_measurement() { return true; } -bool UnitKmeterISO::start_periodic_measurement(const uint32_t interval, const MeasurementUnit munit) { +bool UnitKmeterISO::start_periodic_measurement(const uint32_t interval, const MeasurementUnit munit) +{ if (start_periodic_measurement()) { _interval = interval; _munit = munit; @@ -97,21 +102,25 @@ bool UnitKmeterISO::start_periodic_measurement(const uint32_t interval, const Me return false; } -bool UnitKmeterISO::stop_periodic_measurement() { +bool UnitKmeterISO::stop_periodic_measurement() +{ _periodic = _updated = false; return true; } -bool UnitKmeterISO::readStatus(uint8_t& status) { +bool UnitKmeterISO::readStatus(uint8_t& status) +{ status = 0xFF; return readRegister8(ERROR_STATUS_REG, status, 0); } -bool UnitKmeterISO::readFirmwareVersion(uint8_t& ver) { +bool UnitKmeterISO::readFirmwareVersion(uint8_t& ver) +{ return readRegister8(FIRMWARE_VERSION_REG, ver, 0); } -bool UnitKmeterISO::measureSingleshot(kmeterISO::Data& d, kmeterISO::MeasurementUnit munit, const uint32_t timeoutMs) { +bool UnitKmeterISO::measureSingleshot(kmeterISO::Data& d, kmeterISO::MeasurementUnit munit, const uint32_t timeoutMs) +{ auto timeout_at = m5::utility::millis() + timeoutMs; do { if (isReady()) { @@ -125,7 +134,8 @@ bool UnitKmeterISO::measureSingleshot(kmeterISO::Data& d, kmeterISO::Measurement } bool UnitKmeterISO::measureInternalSingleshot(kmeterISO::Data& d, kmeterISO::MeasurementUnit munit, - const uint32_t timeoutMs) { + const uint32_t timeoutMs) +{ auto timeout_at = m5::utility::millis() + timeoutMs; do { if (isReady()) { @@ -138,7 +148,8 @@ bool UnitKmeterISO::measureInternalSingleshot(kmeterISO::Data& d, kmeterISO::Mea return false; } -bool UnitKmeterISO::changeI2CAddress(const uint8_t i2c_address) { +bool UnitKmeterISO::changeI2CAddress(const uint8_t i2c_address) +{ if (!m5::utility::isValidI2CAddress(i2c_address)) { M5_LIB_LOGE("Invalid address : %02X", i2c_address); return false; @@ -157,17 +168,20 @@ bool UnitKmeterISO::changeI2CAddress(const uint8_t i2c_address) { return false; } -bool UnitKmeterISO::readI2CAddress(uint8_t& i2c_address) { +bool UnitKmeterISO::readI2CAddress(uint8_t& i2c_address) +{ return readRegister8(I2C_ADDRESS_REG, i2c_address, 1); } // -bool UnitKmeterISO::read_measurement(Data& d, const kmeterISO::MeasurementUnit munit) { +bool UnitKmeterISO::read_measurement(Data& d, const kmeterISO::MeasurementUnit munit) +{ assert(m5::stl::to_underlying(munit) < m5::stl::size(reg_temperature_table)); return readRegister(reg_temperature_table[m5::stl::to_underlying(munit)], d.raw.data(), d.raw.size(), 0); } -bool UnitKmeterISO::read_internal_measurement(Data& d, const kmeterISO::MeasurementUnit munit) { +bool UnitKmeterISO::read_internal_measurement(Data& d, const kmeterISO::MeasurementUnit munit) +{ assert(m5::stl::to_underlying(munit) < m5::stl::size(reg_internal_temperature_table)); return readRegister(reg_internal_temperature_table[m5::stl::to_underlying(munit)], d.raw.data(), d.raw.size(), 0); } diff --git a/src/unit/unit_KmeterISO.hpp b/src/unit/unit_KmeterISO.hpp index 2a2c816..d34463f 100644 --- a/src/unit/unit_KmeterISO.hpp +++ b/src/unit/unit_KmeterISO.hpp @@ -35,7 +35,8 @@ enum MeasurementUnit : uint8_t { */ struct Data { std::array raw{}; // raw data - inline float temperature() const { + inline float temperature() const + { return static_cast(((uint32_t)raw[3] << 24) | ((uint32_t)raw[2] << 16) | ((uint32_t)raw[1] << 8) | ((uint32_t)raw[0] << 0)) * 0.01f; @@ -51,7 +52,7 @@ struct Data { class UnitKmeterISO : public Component, public PeriodicMeasurementAdapter { M5_UNIT_COMPONENT_HPP_BUILDER(UnitKmeterISO, 0x66); - public: +public: /*! @struct config_t @brief Settings for begin @@ -66,12 +67,14 @@ class UnitKmeterISO : public Component, public PeriodicMeasurementAdapter(1)} { + : Component(addr), _data{new m5::container::CircularBuffer(1)} + { auto ccfg = component_config(); ccfg.clock = 100 * 1000U; component_config(ccfg); } - virtual ~UnitKmeterISO() { + virtual ~UnitKmeterISO() + { } virtual bool begin() override; @@ -80,11 +83,13 @@ class UnitKmeterISO : public Component, public PeriodicMeasurementAdapter::quiet_NaN(); } ///@} @@ -115,7 +123,8 @@ class UnitKmeterISO : public Component, public PeriodicMeasurementAdapter::startPeriodicMeasurement(); } /*! @@ -125,14 +134,16 @@ class UnitKmeterISO : public Component, public PeriodicMeasurementAdapter::startPeriodicMeasurement(interval, munit); } /*! @brief Stop periodic measurement @return True if successful */ - inline bool stopPeriodicMeasurement() { + inline bool stopPeriodicMeasurement() + { return PeriodicMeasurementAdapter::stopPeriodicMeasurement(); } ///@} @@ -147,7 +158,8 @@ class UnitKmeterISO : public Component, public PeriodicMeasurementAdapter> _data{}; kmeterISO::MeasurementUnit _munit{kmeterISO::MeasurementUnit::Celsius}; config_t _cfg{}; diff --git a/test/common_main.cpp b/test/common_main.cpp index 8a3e521..907b663 100644 --- a/test/common_main.cpp +++ b/test/common_main.cpp @@ -42,7 +42,8 @@ If the Arduino framework is used, the framework library main is used. */ #if !defined(ARDUINO) -int main(int argc, char **argv) { +int main(int argc, char **argv) +{ testing::InitGoogleTest(&argc, argv); #ifdef GTEST_FILTER diff --git a/test/embedded/embedded_main.cpp b/test/embedded/embedded_main.cpp index f8f695e..8a8695e 100644 --- a/test/embedded/embedded_main.cpp +++ b/test/embedded/embedded_main.cpp @@ -23,11 +23,13 @@ namespace { auto& lcd = M5.Display; } // namespace -void test() { +void test() +{ lcd.fillRect(0, 0, lcd.width() >> 1, lcd.height(), RUN_ALL_TESTS() ? TFT_RED : TFT_GREEN); } -void setup() { +void setup() +{ delay(1500); M5.begin(); @@ -46,7 +48,8 @@ void setup() { #endif } -void loop() { +void loop() +{ test(); #if 0 delay(1000); diff --git a/test/embedded/test_kmeterISO/kmeterISO_test.cpp b/test/embedded/test_kmeterISO/kmeterISO_test.cpp index 379038b..2c36c5d 100644 --- a/test/embedded/test_kmeterISO/kmeterISO_test.cpp +++ b/test/embedded/test_kmeterISO/kmeterISO_test.cpp @@ -23,7 +23,8 @@ using namespace m5::unit::kmeterISO; using namespace m5::unit::kmeterISO::command; namespace { -void check_measurement_values(UnitKmeterISO* u) { +void check_measurement_values(UnitKmeterISO* u) +{ EXPECT_TRUE(std::isfinite(u->latest().temperature())); // M5_LOGI("T:%f", u->latest().temperature()); } @@ -35,15 +36,17 @@ constexpr MeasurementUnit mu_table[] = {MeasurementUnit::Celsius, MeasurementUni const ::testing::Environment* global_fixture = ::testing::AddGlobalTestEnvironment(new GlobalFixture<100000U>()); class TestKmeterISO : public ComponentTestBase { - protected: - virtual UnitKmeterISO* get_instance() override { +protected: + virtual UnitKmeterISO* get_instance() override + { auto ptr = new m5::unit::UnitKmeterISO(); auto ccfg = ptr->component_config(); ccfg.stored_size = 8; ptr->component_config(ccfg); return ptr; } - virtual bool is_using_hal() const override { + virtual bool is_using_hal() const override + { return GetParam(); }; }; @@ -52,7 +55,8 @@ class TestKmeterISO : public ComponentTestBase { // INSTANTIATE_TEST_SUITE_P(ParamValues, TestKmeterISO, ::testing::Values(true)); INSTANTIATE_TEST_SUITE_P(ParamValues, TestKmeterISO, ::testing::Values(false)); -TEST_P(TestKmeterISO, Basic) { +TEST_P(TestKmeterISO, Basic) +{ SCOPED_TRACE(ustr); // Version @@ -69,7 +73,8 @@ TEST_P(TestKmeterISO, Basic) { EXPECT_EQ(unit->measurementUnit(), MeasurementUnit::Celsius); } -TEST_P(TestKmeterISO, Singleshot) { +TEST_P(TestKmeterISO, Singleshot) +{ SCOPED_TRACE(ustr); Data d{}; @@ -84,7 +89,8 @@ TEST_P(TestKmeterISO, Singleshot) { } } -TEST_P(TestKmeterISO, Periodic) { +TEST_P(TestKmeterISO, Periodic) +{ SCOPED_TRACE(ustr); constexpr uint32_t interval{25}; @@ -128,7 +134,8 @@ TEST_P(TestKmeterISO, Periodic) { WARNING!! Failure of this test will result in an unexpected I2C address being set! */ -TEST_P(TestKmeterISO, I2CAddress) { +TEST_P(TestKmeterISO, I2CAddress) +{ SCOPED_TRACE(ustr); Data d{};