]> pilppa.org Git - lib1wire.git/blobdiff - src/Factory.cc
Implemented yearly calculations for min, max, mean, delta and sum
[lib1wire.git] / src / Factory.cc
index 1ce585b003c23b8e42093696ae46ca4f4c6918f0..76287eb17f553ad89f4a7b24c47fb683c6fa75df 100644 (file)
@@ -18,6 +18,7 @@
 #include "W1Util.hh"
 
 using namespace w1;
+using namespace plp;
 using namespace std;
 
 template <class NumberDataType>
@@ -42,6 +43,7 @@ W1Device *Factory::get_device(int family_code,
                        dirent *direntry_param) {
        W1Device        *ret_val;
        DeviceConfig    *config;
+       string          type;
 
        ret_val = NULL;
        switch(family_code) {
@@ -52,6 +54,9 @@ W1Device *Factory::get_device(int family_code,
                case    0x1d:
                        ret_val = new W1CounterDevice(family_code, device_id, direntry_param);
                        break;
+               case    0x81:
+                       // 0x81 is the 1-wire USB dongle... No need to create device for it.
+                       break;
                default:
                        log_debug("Unsupported 1-wire-family code: %#x, device not created: %s\n", family_code, device_id.c_str());
                        break;
@@ -62,7 +67,6 @@ W1Device *Factory::get_device(int family_code,
                config  = get_device_config(device_id);
                if (config != NULL) {
                        // if not, create default device config
-                       string  type;
                        type    = config->get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
                        if (type.empty() == true) {
                                type    = ret_val->get_device_type();
@@ -75,7 +79,7 @@ W1Device *Factory::get_device(int family_code,
        return ret_val;
 }
 
-W1Device *Factory::create_device(dirent *direntry_param) {
+W1Device *Factory::create_device(dirent *direntry_param, int *err_code_param) {
        string          folder_name;
        string          tmp_str;
        string          device_name;
@@ -85,18 +89,26 @@ W1Device *Factory::create_device(dirent *direntry_param) {
        W1Device        *ret_val;
 
        ret_val         = NULL;
+       *err_code_param = 0;
        folder_name     = direntry_param->d_name;
        pos             = folder_name.find("-");
        if (pos > 0) {
                tmp_str = folder_name.substr(0, pos);
                // number in string is in hex format, convert to int
                suc_flg = string_to_number<int>(family_code, tmp_str, hex);
-               if (suc_flg == true) {
-                       log_debug("1-wire device family code: %#x\n", family_code);
-                       device_name     = folder_name.substr(pos + 1, folder_name.length() - pos);
-                       ret_val         = Factory::get_device(family_code,
-                                                       device_name,
-                                                       direntry_param);
+               // if family code = 0x81 (1-wire usb dongle), do not try to create the device
+               if (family_code != 0x81) {
+                       if (suc_flg == true) {
+                               log_debug("1-wire device family code: %#x\n", family_code);
+                               device_name     = folder_name.substr(pos + 1, folder_name.length() - pos);
+                               ret_val         = Factory::get_device(family_code,
+                                                               device_name,
+                                                               direntry_param);
+                               if ((ret_val == NULL) &&
+                                   (family_code != 0x81)) {
+                                       *err_code_param = 1;
+                               }
+                       }
                }
        }
        return ret_val;
@@ -116,12 +128,15 @@ list<W1Device *> Factory::get_device_list() {
                while(direntry != NULL) {
                        is_subdir       = W1Util::is_subdirectory(W1_SCAN_ROOTDIR, direntry);
                        if (is_subdir == true) {
-                               device  = create_device(direntry);
+                               err_flg = 0;
+                               device  = create_device(direntry, &err_flg);
                                if (device != NULL) {
                                        ret_val.push_back(device);
                                }
                                else {
-                                       log_info("Unsupported 1-wire device detected: %s\n", direntry->d_name);
+                                       if (err_flg != 0) {
+                                               log_info("Unsupported 1-wire device detected: %s\n", direntry->d_name);
+                                       }
                                }
                        }
                        direntry        = readdir(dir);