]> pilppa.org Git - lib1wire.git/blobdiff - src/W1Scanner.cc
Support for seting and changing values from device specific config
[lib1wire.git] / src / W1Scanner.cc
index 08f96cc10ee765c34b841cc7249d8efa100d3a63..d40108e2bc32d1b89bd21d813ff6c7175cd004f2 100644 (file)
 #include <iostream>
 
 #include <plp/log.h>
+
+#include "W1Util.hh"
 #include "W1Scanner.hh"
 #include "W1TemperatureSensor.hh"
+#include "W1CounterDevice.hh"
+#include "Factory.hh"
 
 using namespace w1;
 using namespace std;
 
-W1Scanner::W1Scanner() {
-       log_debug("created");
-}
-
-W1Scanner::~W1Scanner() {
-       log_debug("destroyed");
-}
-
-bool W1Scanner::is_subdirectory(dirent *direntry) {
-       bool ret_val    = true;
-       if (strcmp(direntry->d_name, ".") == 0 ||
-               (strcmp(direntry->d_name, "..") == 0)) {
-                       ret_val = false;
-       }
-       return ret_val;
-}
-
-template <class T>
-bool string_to_number(T& result,
+template <class NumberDataType>
+bool string_to_number(NumberDataType& result,
                  const std::string& string_param,
                  std::ios_base& (*format)(std::ios_base&))
 {
@@ -45,55 +32,64 @@ bool string_to_number(T& result,
        return !(iss >> format >> result).fail();
 }
 
-W1Device *W1Scanner::create_device(dirent *direntry) {
+W1Scanner::W1Scanner() {
+       log_debug("W1Scanner created\n");
+}
+
+W1Scanner::~W1Scanner() {
+}
+
+W1Device *W1Scanner::create_device(dirent *direntry_param) {
        string          folder_name;
-       string          temp_str;
+       string          tmp_str;
        string          device_name;
        int             pos;
-       int                     family_code;
-       bool            sucFlg;
+       int             family_code;
+       bool            suc_flg;
        W1Device        *ret_val;
 
        ret_val         = NULL;
-       folder_name     = direntry->d_name;
-       pos                     = folder_name.find("-");
+       folder_name     = direntry_param->d_name;
+       pos             = folder_name.find("-");
        if (pos > 0) {
-               temp_str        = folder_name.substr(0, pos);
+               tmp_str = folder_name.substr(0, pos);
                // number in string is in hex format, convert to int
-               sucFlg          = string_to_number<int>(family_code, temp_str, hex);
-               if (sucFlg == true) {
-                       cout << "family_code: " << family_code << endl;
+               suc_flg = string_to_number<int>(family_code, tmp_str, hex);
+               if (suc_flg == true) {
+                       log_debug("family_code: %d\n", family_code);
                        device_name     = folder_name.substr(pos + 1, folder_name.length() - pos);
-                       switch(family_code) {
-                               case    0x10:
-                               case    0x28:
-                                       cout << "temperature sensor: " << family_code << endl;
-                                       ret_val = new W1TemperatureSensor(direntry, family_code, device_name);
-                                       break;
-                       }
+                       ret_val         = Factory::get_device(family_code,
+                                                       device_name,
+                                                       direntry_param);
                }
        }
        return ret_val;
-
 }
 
 list<W1Device *> W1Scanner::get_device_list() {
-       DIR                             *dir;
-       int                                     err_flg;
+       DIR                     *dir;
+       int                     err_flg;
        struct dirent           *direntry;
-       W1Device                        *device;
-    list<W1Device *>   ret_val;
+       W1Device                *device;
+       list<W1Device *>        ret_val;
+       bool                    is_subdir;
 
-       dir             = opendir(W1_SCAN_ROOTDIR);
+       printf("get_device_list() started\n");
+       dir     = opendir(W1_SCAN_ROOTDIR);
        if (dir != NULL) {
                direntry        = readdir(dir);
                while(direntry != NULL) {
-                       if (is_subdirectory(direntry) == true) {
-                               log_debug("dir_name: %s\n", direntry->d_name);
+                       is_subdir       = W1Util::is_subdirectory(W1_SCAN_ROOTDIR, direntry);
+                       if (is_subdir == true) {
+                               log_info("dir_name: %s\n", direntry->d_name);
                                device  = create_device(direntry);
                                if (device != NULL) {
+                                       log_info("device: %d\n", device->get_family_code());
                                        ret_val.push_back(device);
                                }
+                               else {
+                                       log_info("unsupported device-directory: %s\n", direntry->d_name);
+                               }
                        }
                        direntry        = readdir(dir);
                }