4 * Created on: Dec 9, 2010
8 #include "DeviceConfig.hh"
15 #include "DataReader.hh"
16 #include "FileUtil.hh"
21 string DeviceConfig::store_base_dir = DEFAULT_STORAGE_BASE_DIR;
23 ConfigHandle::ConfigHandle(uci_context *ctx_param, uci_package *pkg_param) {
28 ConfigHandle::~ConfigHandle() {
29 uci_unload(_ctx, _pkg);
30 uci_free_context(_ctx);
33 DeviceConfig::DeviceConfig(string device_id_param) {
34 device_id = device_id_param;
35 uci_handle = load_device_config(device_id_param);
36 if (uci_handle != NULL) {
37 device_type = get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
40 log_error("Could not read device configuration.\n");
44 DeviceConfig::~DeviceConfig() {
45 if (uci_handle != NULL) {
51 void DeviceConfig::set_base_dir_name(string store_param) {
55 pos = store_param.find_last_of("/");
56 b_count = store_param.length();
57 if (pos == (b_count - 1)) {
58 store_base_dir = store_param;
61 store_base_dir = store_param + "/";
65 string DeviceConfig::get_base_dir_name() {
66 return store_base_dir;
69 string DeviceConfig::get_dir_name(string device_id_param) {
73 d_name = DeviceConfig::get_base_dir_name();
74 ret_val = FileUtil::concat_paths(d_name, device_id_param);
78 string DeviceConfig::get_file_name(string device_id_param) {
82 fname = DEVICE_CONFIG__FILE_NAME;
83 ret_val = get_dir_name(device_id);
84 ret_val = FileUtil::concat_paths(ret_val, fname);
88 string DeviceConfig::get_cfg_value(string key) {
89 struct uci_section *section;
90 struct uci_option *option;
93 if (uci_handle != NULL) {
94 section = uci_lookup_section(uci_handle->_ctx, uci_handle->_pkg, DEVICE_CONFIG__SECTION_NAME);
95 if (section != NULL) {
96 option = uci_lookup_option(uci_handle->_ctx, section, key.c_str());
98 switch (option->type) {
100 //log_info("key: %s option name: %s, value: %s\n", key.c_str(), option->e.name, option->v.string);
101 ret_val = option->v.string;
104 log_error("key: %s Failed to read parameter value\n", key.c_str());
109 log_error("key: %s Failed to read parameter value\n", key.c_str());
116 void DeviceConfig::set_cfg_value(string key, string value) {
120 cfg_dir = get_dir_name(device_id);
121 cfg_fl = DEVICE_CONFIG__FILE_NAME;
122 set_config_value(cfg_dir.c_str(),
124 DEVICE_CONFIG__SECTION_TYPE,
125 DEVICE_CONFIG__SECTION_NAME,
130 EnumSummaryCalculationType DeviceConfig::get_summary_calculation_type() {
131 EnumSummaryCalculationType ret_val;
134 if (device_type.empty() == false) {
135 if (device_type.compare("Counter Device") == 0) {
142 ConfigHandle *DeviceConfig::load_device_config(string device_id_param) {
144 struct uci_context *ctx;
145 struct uci_package *pkg;
148 ConfigHandle *ret_val;
151 cfg_dir = get_dir_name(device_id_param);
152 if (cfg_dir.empty() == false) {
153 if (access(cfg_dir.c_str(), W_OK) != 0) {
154 FileUtil::mkdirs(cfg_dir.c_str());
156 cfg_fl = get_file_name(device_id_param);
157 if (access(cfg_fl.c_str(), R_OK) == 0) {
158 ctx = uci_alloc_context();
160 //log_debug("uci_set_confdir: %s\n", cfg_dir.c_str());
161 uci_set_confdir(ctx, cfg_dir.c_str());
162 err_flg = uci_load(ctx, cfg_fl.c_str(), &pkg);
163 if (err_flg == UCI_OK) {
164 //log_debug("Loaded device configuration: %s.\n", cfg_fl.c_str());
165 ret_val = new ConfigHandle(ctx, pkg);
168 log_debug("Failed to load device configuration: %s, err code: %d.\n", cfg_fl.c_str(), UCI_OK);
169 set_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE, "");
170 uci_free_context(ctx);
174 log_error("Failed to load device device configuration, memory allocation error.\n");
175 set_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE, "");
179 log_error("Failed to load device device configuration, file does not exist: %s.\n", cfg_fl.c_str());
185 DeviceConfig *DeviceConfig::get_device_config(string device_id) {
186 DeviceConfig *ret_val;
188 ret_val = new DeviceConfig(device_id);