From 137622902f94c96146504f241a2f825f55c04e7c Mon Sep 17 00:00:00 2001 From: Lefucjusz Date: Sun, 5 Feb 2023 19:10:16 +0100 Subject: [PATCH] [MOS-766] Change factory entries initialization routine Changed of the algorithm used to initialize settings database with values read from EEPROM, previously first insertion failure resulted in stopping the whole process, now next values are inserted even if previous has failed. Additionally minor cleanup. --- module-db/Database/Field.cpp | 45 ++++++++++-------- module-db/Database/Field.hpp | 28 +++++------ module-db/Database/sqlite3vfs.cpp | 2 - .../agents/settings/FactorySettings.cpp | 47 ++++++++++--------- 4 files changed, 60 insertions(+), 62 deletions(-) diff --git a/module-db/Database/Field.cpp b/module-db/Database/Field.cpp index ba66f9186a105600b131dd1237da351ab22cf8ec..af72b8d6e47834b8f143d2d7bb1ad36707e6dc28 100644 --- a/module-db/Database/Field.cpp +++ b/module-db/Database/Field.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "Field.hpp" @@ -10,6 +10,11 @@ const char *Field::getCString() const return mValue.c_str(); } +const std::string &Field::getString() const +{ + return mValue; +} + template static T lget(T &val, const std::string &mValue, std::function foo) { @@ -44,47 +49,47 @@ double Field::getDouble() const return lget(ret, mValue, [=]() -> double { return std::stod(mValue); }); } -int8_t Field::getInt8() const +std::int8_t Field::getInt8() const { - return !mValue.empty() ? static_cast(atol(mValue.c_str())) : int8_t(0); + return !mValue.empty() ? static_cast(atol(mValue.c_str())) : static_cast(0); } -int32_t Field::getInt32() const +std::int32_t Field::getInt32() const { - return !mValue.empty() ? static_cast(atol(mValue.c_str())) : int32_t(0); + return !mValue.empty() ? static_cast(atol(mValue.c_str())) : static_cast(0); } -uint8_t Field::getUInt8() const +std::uint8_t Field::getUInt8() const { - return !mValue.empty() ? static_cast(atol(mValue.c_str())) : uint8_t(0); + return !mValue.empty() ? static_cast(atol(mValue.c_str())) : static_cast(0); } -uint16_t Field::getUInt16() const +std::uint16_t Field::getUInt16() const { - return !mValue.empty() ? static_cast(atol(mValue.c_str())) : uint16_t(0); + return !mValue.empty() ? static_cast(atol(mValue.c_str())) : static_cast(0); } -int16_t Field::getInt16() const +std::int16_t Field::getInt16() const { - return !mValue.empty() ? static_cast(atol(mValue.c_str())) : int16_t(0); + return !mValue.empty() ? static_cast(atol(mValue.c_str())) : static_cast(0); } -uint32_t Field::getUInt32() const +std::uint32_t Field::getUInt32() const { - uint32_t ret; - return lget(ret, mValue, [=]() -> unsigned long { return std::stoul(mValue); }); + std::uint32_t ret; + return lget(ret, mValue, [=]() -> unsigned long { return std::stoul(mValue); }); } -uint64_t Field::getUInt64() const +std::uint64_t Field::getUInt64() const { - uint64_t ret; - return lget(ret, mValue, [=]() -> unsigned long long { return std::stoull(mValue); }); + std::uint64_t ret; + return lget(ret, mValue, [=]() -> unsigned long long { return std::stoull(mValue); }); } -int64_t Field::getInt64() const +std::int64_t Field::getInt64() const { - int64_t ret; - return lget(ret, mValue, [=]() -> long long { return std::stoll(mValue); }); + std::int64_t ret; + return lget(ret, mValue, [=]() -> long long { return std::stoll(mValue); }); } void Field::setValue(const char *value) diff --git a/module-db/Database/Field.hpp b/module-db/Database/Field.hpp index 6a7cf13b0932a8d0259422f51a97f78c65f3a8d2..04d9acf908139a40bd2c2ea44ed637edef24f248 100644 --- a/module-db/Database/Field.hpp +++ b/module-db/Database/Field.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -14,33 +14,27 @@ class Field Field(const char *value) { - if (value) { + if (value != nullptr) { mValue = value; } } - // Field(Field const&); - - // Field& operator=(Field const&); ~Field() {} const char *getCString() const; - std::string getString() const - { - return mValue; - } + const std::string &getString() const; float getFloat() const; bool getBool() const; double getDouble() const; - int8_t getInt8() const; - int32_t getInt32() const; - uint8_t getUInt8() const; - uint16_t getUInt16() const; - int16_t getInt16() const; - uint32_t getUInt32() const; - uint64_t getUInt64() const; - int64_t getInt64() const; + std::int8_t getInt8() const; + std::int32_t getInt32() const; + std::uint8_t getUInt8() const; + std::uint16_t getUInt16() const; + std::int16_t getInt16() const; + std::uint32_t getUInt32() const; + std::uint64_t getUInt64() const; + std::int64_t getInt64() const; void setValue(const char *value); private: diff --git a/module-db/Database/sqlite3vfs.cpp b/module-db/Database/sqlite3vfs.cpp index 48f430962cad5605c7894fae8615fc87d583ed7d..cf55750fcb54f2af8177428bcbcdf69dcfdfc241 100644 --- a/module-db/Database/sqlite3vfs.cpp +++ b/module-db/Database/sqlite3vfs.cpp @@ -113,9 +113,7 @@ #include #include #include -#include #include -#include #include #include #include diff --git a/module-services/service-db/agents/settings/FactorySettings.cpp b/module-services/service-db/agents/settings/FactorySettings.cpp index 49b477324eec548dcd413b4fc873fd315117e5b3..68eaedaa82059bc751a403aea69c27fc517be73f 100644 --- a/module-services/service-db/agents/settings/FactorySettings.cpp +++ b/module-services/service-db/agents/settings/FactorySettings.cpp @@ -11,8 +11,8 @@ namespace settings std::unique_ptr FactorySettings::getMfgEntries() { - auto factoryContent = readMfgSettings(filePath); - std::unique_ptr factoryData = std::make_unique(); + auto factoryData = std::make_unique(); + const auto factoryContent = readMfgSettings(filePath); for (const auto &[path, value] : factoryContent.object_items()) { factoryData->addRow({Field(path.c_str()), Field(value.string_value().c_str())}); @@ -23,32 +23,33 @@ namespace settings void FactorySettings::initDb(Database *database) { - auto factoryData = getMfgEntries(); - if (factoryData->getRowCount()) { - do { - - settings::EntryPath variablePath{"", - "", - "", - settings::factory::entry_key + std::string("/") + - (*factoryData)[0].getString(), - settings::SettingsScope::Global}; - auto value = (*factoryData)[1].getString(); - - if (!database->execute( - settings::Statements::insertValue, variablePath.to_string().c_str(), value.c_str())) { - break; - } - - LOG_INFO("Put factory entry: %s=%s", variablePath.to_string().c_str(), value.c_str()); - - } while (factoryData->nextRow()); + const auto factoryData = getMfgEntries(); + + if (factoryData->getRowCount() <= 0) { + LOG_FATAL("No EEPROM factory data available!"); + return; } + + do { + const auto key = (*factoryData)[0].getString(); + const auto value = (*factoryData)[1].getCString(); + const auto path = settings::factory::entry_key + std::string("/") + key; + const auto pathString = settings::EntryPath{"", "", "", path, settings::SettingsScope::Global}.to_string(); + + if (!database->execute(settings::Statements::insertValue, pathString.c_str(), value)) { + LOG_ERROR("Failed to set entry '%s' = '%s'!", pathString.c_str(), value); + } + else { + LOG_INFO("Set entry '%s' = '%s'", pathString.c_str(), value); + } + + } while (factoryData->nextRow()); } + json11::Json FactorySettings::readMfgSettings(const std::string &path) { std::ifstream file(path.c_str()); - std::string content((std::istreambuf_iterator(file)), std::istreambuf_iterator()); + const std::string content((std::istreambuf_iterator(file)), std::istreambuf_iterator()); std::string parserError; auto factoryObj = json11::Json::parse(content, parserError);