#ifndef BSP_Q7S_CORE_NVMPARAMS_NVMPARAMIF_H_ #define BSP_Q7S_CORE_NVMPARAMS_NVMPARAMIF_H_ #include #include #include #include "fsfw/returnvalues/returnvalue.h" #include "returnvalues/classIds.h" class NVMParameterBase { public: virtual ~NVMParameterBase() {} NVMParameterBase(std::string fullName); /** * @brief Use this constructor when name of json file shall be set on an later * point */ NVMParameterBase(); bool getJsonFileExists(); /** * Returns returnvalue::OK on successfull read and HasFileSystemIF::FILE_DOES_NOT_EXIST if * file does not exist yet. * @return */ virtual ReturnValue_t readJsonFile(); virtual ReturnValue_t writeJsonFile(); virtual void setFullName(std::string fullName); std::string getFullName() const; template ReturnValue_t insertValue(std::string key, T value); template ReturnValue_t setValue(std::string key, T value); template ReturnValue_t getValue(std::string key, T& value) const; void printKeys() const; void print() const; private: static const uint8_t INTERFACE_ID = CLASS_ID::NVM_PARAM_BASE; //! [EXPORT] : [COMMENT] Specified key does not exist in json file static const ReturnValue_t KEY_NOT_EXISTS = MAKE_RETURN_CODE(0xA0); nlohmann::json json; std::vector keys; std::string fullName = ""; }; template inline ReturnValue_t NVMParameterBase::insertValue(std::string key, T value) { // Check whether key already exists. If it does not, insert it if (std::find(keys.begin(), keys.end(), key) == keys.end()) { keys.push_back(key); } json[key] = value; return returnvalue::OK; } template inline ReturnValue_t NVMParameterBase::setValue(std::string key, T value) { json[key] = value; return returnvalue::OK; } template inline ReturnValue_t NVMParameterBase::getValue(std::string key, T& value) const { if (!json.contains(key)) { return KEY_NOT_EXISTS; } value = json[key]; return returnvalue::OK; } #endif /* BSP_Q7S_CORE_NVMPARAMS_NVMPARAMIF_H_ */