if (device_config == NULL) {
device_config = DeviceConfig::get_device_config(device_id);
- ret_val = device_config->get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
+ ret_val = device_config->get_config_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
}
return ret_val;
}
#include "DeviceConfig.hh"
+#include <stdbool.h>
#include <string.h>
#include <malloc.h>
device_id = device_id_param;
uci_handle = load_device_config(device_id_param);
if (uci_handle != NULL) {
- device_type = get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
+ device_type = get_config_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
}
else {
log_error("Could not read device configuration.\n");
return ret_val;
}
-string DeviceConfig::get_cfg_value(string key) {
+string DeviceConfig::get_config_value(string key) {
struct uci_section *section;
struct uci_option *option;
string ret_val;
return ret_val;
}
-void DeviceConfig::set_cfg_value(string key, string value) {
+void DeviceConfig::set_config_value(string key,
+ string value,
+ bool save_immediately) {
string cfg_dir;
string cfg_fl;
cfg_dir = get_dir_name(device_id);
cfg_fl = DEVICE_CONFIG__FILE_NAME;
- set_config_value(cfg_dir.c_str(),
+ set_config_value_to_section(cfg_dir.c_str(),
cfg_fl.c_str(),
DEVICE_CONFIG__SECTION_TYPE,
DEVICE_CONFIG__SECTION_NAME,
key.c_str(),
- value.c_str());
+ value.c_str(),
+ save_immediately);
}
EnumSummaryCalculationType DeviceConfig::get_summary_calculation_type() {
}
else {
log_debug("Failed to load device configuration: %s, err code: %d.\n", cfg_fl.c_str(), UCI_OK);
- set_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE, "");
+ set_config_value(DEVICE_CONFIG_VALUE_KEY__TYPE, "", true);
uci_free_context(ctx);
}
}
else {
log_error("Failed to load device device configuration, memory allocation error.\n");
- set_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE, "");
+ set_config_value(DEVICE_CONFIG_VALUE_KEY__TYPE, "", true);
}
}
else {
extern "C" {
#include <uci.h>
#include "config.h"
+ #include <stdbool.h>
}
enum EnumSummaryPeriod{PERIOD_YEARLY, PERIOD_MONTHLY, PERIOD_DAILY, PERIOD_HOURLY, PERIOD_MINUTELY, PERIOD_SECONDLY};
const std::string SUMMARY_PERIOD_NAMES_ARRAY[] = {"yearly", "monthly", "daily", "minutely", "secondly"};
const std::string CALCULATION_TYPE_NAMES_ARRAY[] = {"sum", "delta", "min", "max", "mean"};
-#define DEVICE_CONFIG__FILE_NAME "device_cfg"
-#define DEVICE_CONFIG__SECTION_TYPE "device"
-#define DEVICE_CONFIG__SECTION_NAME "base_data"
-#define DEVICE_CONFIG_VALUE_KEY__TYPE "type"
-#define DEVICE_CONFIG_VALUE_KEY__ID "id"
-#define DEVICE_CONFIG_VALUE_KEY__NAME "name"
+#define DEVICE_CONFIG__FILE_NAME "device_cfg"
+#define DEVICE_CONFIG__SECTION_TYPE "device"
+#define DEVICE_CONFIG__SECTION_NAME "base_data"
+#define DEVICE_CONFIG_VALUE_KEY__TYPE "type"
+#define DEVICE_CONFIG_VALUE_KEY__ID "id"
+#define DEVICE_CONFIG_VALUE_KEY__NAME "name"
-#define DEFAULT_STORAGE_BASE_DIR "/tmp/w1data"
-#define DATAFILE_SUFFIX ".txt"
-#define CACHE_DIR_NAME "cache"
+#define DEFAULT_STORAGE_BASE_DIR "/tmp/w1data"
+#define DATAFILE_SUFFIX ".txt"
+#define CACHE_DIR_NAME "cache"
namespace plp {
struct ConfigHandle {
static std::string get_base_dir_name();
static void set_base_dir_name(std::string store_param);
static DeviceConfig *get_device_config(std::string device_id);
- std::string get_cfg_value(std::string key);
- void set_cfg_value(std::string key, std::string value);
+ std::string get_config_value(std::string key);
+ void set_config_value(std::string key,
+ std::string value,
+ bool save_immediately);
EnumSummaryCalculationType get_summary_calculation_type();
private:
static std::string store_base_dir;
#include <stdlib.h>
#include <unistd.h>
#include <uci.h>
+#include <stdbool.h>
#include "log.h"
#include "config.h"
-static int uci_create_named_section(struct uci_context *ctx, const char *conf_file_name, const char *section_type, const char *section_name)
+static int uci_create_named_section(struct uci_context *ctx,
+ const char *conf_file_name,
+ const char *section_type,
+ const char *section_name,
+ bool save_immediately)
{
- struct uci_ptr ptr;
- int ret_val;
- char *cmd_data;
- int len;
+ struct uci_ptr ptr;
+ int ret_val;
+ char *cmd_data;
+ int len;
ret_val = -1;
if ((ctx != NULL) &&
if (uci_lookup_ptr(ctx, &ptr, cmd_data, true) == UCI_OK) {
ret_val = uci_set(ctx, &ptr);
if (ret_val == UCI_OK) {
- //ret_val = uci_save(ctx, ptr.p);
+ if (save_immediately) {
+ ret_val = uci_save(ctx, ptr.p);
+ }
}
}
free(cmd_data);
return ret_val;
}
-bool set_config_value(const char *conf_dir_name,
+bool set_config_value_to_section(const char *conf_dir_name,
const char *conf_file_name,
const char *section_type,
const char *section_name,
const char *key,
- const char *value) {
+ const char *value,
+ bool save_immediately) {
struct uci_context *ctx;
struct uci_package *pkg;
struct uci_section *sct;
}
}
if (sct == NULL) {
- log_debug("Creating configuration section %s to configuration file: %s\n", section_name, fname);
+ log_debug("Creating new section %s to configuration file: %s\n", section_name, fname);
//err_flg = uci_add_named_section(ctx, pkg, section_type, section_name, &sct);
//err_flg = uci_add_section(ctx, pkg, section_name, &sct);
- err_flg = uci_create_named_section(ctx, conf_file_name, section_type, section_name);
+ err_flg = uci_create_named_section(ctx,
+ conf_file_name,
+ section_type,
+ section_name,
+ false);
if (err_flg == UCI_OK) {
uci_foreach_element(&pkg->sections, elem) {
tmp_sct = uci_to_section(elem);
}
}
}
- if (err_flg == 0) {
+ if (err_flg == UCI_OK) {
memset(&ptr, 0, sizeof(ptr));
ptr.package = pkg->e.name;
ptr.section = sct->e.name;
ptr.option = key;
-
- if (uci_lookup_ptr(ctx, &ptr, NULL, false) == UCI_OK) {
+ err_flg = uci_lookup_ptr(ctx, &ptr, NULL, false);
+ if (err_flg == UCI_OK) {
ptr.value = value;
- uci_set(ctx, &ptr);
- uci_save(ctx, pkg);
- ret_val = true;
- log_debug("Created configuration section %s to configuration file: %s\n", section_name, fname);
+ err_flg = uci_set(ctx, &ptr);
+ if (err_flg == UCI_OK) {
+ if (save_immediately == true) {
+ err_flg = uci_save(ctx, pkg);
+ if (err_flg != UCI_OK) {
+ log_error("Failed to set value to configuration file: %s\n. Could not save the file\n", fname);
+ }
+ }
+ if (err_flg == UCI_OK) {
+ ret_val = true;
+ log_debug("Set value to section %s in configuration file: %s\n", section_name, fname);
+ }
+ }
+ else {
+ log_error("Failed to set value to configuration file: %s\n. Could not set new value\n", fname);
+ }
}
else {
- log_error("Could not write to configuration file: %s\n. Could not look-up pointer for package %s section %s.\n", fname, pkg->e.name, sct->e.name);
+ log_error("Failed to set value to configuration file: %s\n. Could not look-up pointer for package %s section %s.\n", fname, pkg->e.name, sct->e.name);
}
uci_free_context(ctx);
}
else {
- log_error("Could not write to configuration file: %s. Could not create section %s.\n", fname, section_name);
+ log_error("Failed to set value to configuration file: %s. Could not create section %s.\n", fname, section_name);
}
}
else {
- log_error("Could not write to configuration file: %s. File does not exist or is not writable\n.", fname);
+ log_error("Failed to set value to configuration file: %s. File does not exist or is not writable\n.", fname);
}
}
free(fname);
}
else {
- log_error("Could not change config value, out of memory\n");
+ log_error("Failed to set value to configuration file: %s, out of memory\n", fname);
}
}
else {
- log_error("Could not change config value, invalid parameters\n");
+ log_error("Failed to set value to configuration file, invalid parameters\n");
}
return ret_val;
}
#include <stdbool.h>
-bool set_config_value(const char *conf_dir_name,
+bool set_config_value_to_section(const char *conf_dir_name,
const char *conf_file_name,
const char *section_type,
const char *section_name,
const char *key,
- const char *value);
+ const char *value,
+ bool save_immediately);
#endif /* CONFIG_H_ */
getcwd(work_dir, sizeof(work_dir));
printf("working directory: %s\n", work_dir);
- set_config_value(work_dir,
- "dev_cfg.txt",
+ set_config_value_to_section(work_dir,
+ "dev_cfg_txt",
"mysection_type",
"mysection_name",
"myoption_name",
- "my_option_value");
- set_config_value(work_dir,
- "dev_cfg.txt",
+ "my_option_value",
+ false);
+ set_config_value_to_section(work_dir,
+ "dev_cfg_txt",
"mysection_type",
"mysection_name",
"myoption_name",
- "my_option_value2");
+ "my_option_value3",
+ true);
}
int main(int argc, char** argv) {