]> pilppa.org Git - lib1wire.git/blobdiff - src/W1Device.cc
load deviceconfig only once
[lib1wire.git] / src / W1Device.cc
index eb94b24b3039ed611d17f5ba6d2692441b3835bb..4111dd9cb8c485e61733c7428e02ca7a6b230ba7 100644 (file)
@@ -45,6 +45,7 @@ W1Device::W1Device(string device_id_param,
        }
        reader  = new DataReader(id);
        name    = "";
+       _cfg    = NULL;
 }
 
 W1Device::~W1Device() {
@@ -56,28 +57,26 @@ W1Device::~W1Device() {
        }
 }
 
-string W1Device::get_name() {
-       DeviceConfig    *cfg;
-
+string Device::get_name() {
        if (name.empty() == true) {
-               cfg     = DeviceConfig::get_device_config(id);
-               if (cfg != NULL) {
-                       name    = cfg->get_config_value(DEVICE_CONFIG_VALUE_KEY__NAME);
-                       delete(cfg);
+               if (_cfg == NULL) {
+                       _cfg    = DeviceConfig::get_device_config(id);
+               }
+               if (_cfg != NULL) {
+                       _cfg->get_config_value(DEVICE_CONFIG_VALUE_KEY__NAME, name);
                }
        }
        return name;
 }
 
-void W1Device::set_name(string name_param) {
-       DeviceConfig    *cfg;
-
+void Device::set_name(string name_param) {
        if (name.compare(name_param) != 0) {
                name    = name_param;
-               cfg     = DeviceConfig::get_device_config(id);
-               if (cfg != NULL) {
-                       cfg->set_config_value(DEVICE_CONFIG_VALUE_KEY__NAME, name_param);
-                       delete(cfg);
+               if (_cfg == NULL) {
+                       _cfg    = DeviceConfig::get_device_config(id);
+               }
+               if (_cfg != NULL) {
+                       _cfg->set_config_value(DEVICE_CONFIG_VALUE_KEY__NAME, name_param, true);
                }
        }
 }
@@ -155,7 +154,10 @@ void W1Device::save_and_clean_cache() {
 
        dec_precision   = get_data_decimal_precision();
        pthread_mutex_lock(&plock);
-       log_debug("memory cache size: %d\n", memory_cache.size());
+       /* needs to be casted to long unsigned int value is "unsigned int" in some
+           toolchains and that would otherwise cause an warning/error 
+        */
+       log_debug("memory cache size: %lu\n", (long unsigned int)memory_cache.size());
        StoreDay::save(id, &memory_cache, dec_precision);
        while(memory_cache.empty() == false) {
                data    = memory_cache.back();
@@ -165,6 +167,6 @@ void W1Device::save_and_clean_cache() {
        pthread_mutex_unlock(&plock);
 }
 
-const DataReader *W1Device::get_device_data() {
+const DataReader *W1Device::get_datareader() {
        return reader;
 }