]> pilppa.org Git - lib1wire.git/blobdiff - src/W1Device.cc
load deviceconfig only once
[lib1wire.git] / src / W1Device.cc
index 84f4fecb9c78eff856bec0ee160b712f4b2da35a..4111dd9cb8c485e61733c7428e02ca7a6b230ba7 100644 (file)
@@ -45,10 +45,11 @@ W1Device::W1Device(string device_id_param,
        }
        reader  = new DataReader(id);
        name    = "";
+       _cfg    = NULL;
 }
 
 W1Device::~W1Device() {
-       log_debug("W1Device destructor\n");
+       log_debug("started\n");
        save_and_clean_cache();
        if (reader != NULL) {
                delete(reader);
@@ -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);
                }
        }
 }
@@ -114,21 +113,18 @@ Data *W1Device::get_data() {
        Data            *ret_val;
        vector<double>  *vect;
 
-       log_debug("get_data() started\n");
        ret_val = NULL;
        vect    = get_raw_data();
        if (vect != NULL) {
-               log_debug("get_data() got raw data\n");
                ret_val = new Data(vect, get_unit());
                cache(ret_val);
                delete(vect);
-               log_debug("get_data() got raw data done\n");
+               log_debug("%s returning new data\n", id.c_str());
        }
        else {
-               log_debug("get_data() try to read old already saved data\n");
-               // read old data already saved
+               // read old already saved data
+               log_debug("%s returning old saved data\n", id.c_str());
                ret_val = reader->get_latest_data();
-               log_debug("get_data() try to read old already saved data done\n");
        }
        return ret_val;
 }
@@ -158,7 +154,10 @@ void W1Device::save_and_clean_cache() {
 
        dec_precision   = get_data_decimal_precision();
        pthread_mutex_lock(&plock);
-       log_debug("save_and_clean_cache(): 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();
@@ -168,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;
 }