]> pilppa.org Git - lib1wire.git/blobdiff - src/W1Scanner.cc
Initial support for reading log-data.
[lib1wire.git] / src / W1Scanner.cc
index a27b23d5d41430c749f26e23b0521bd70f858a01..390c2510576f4267747b6ef5064d76a1b4bd93ae 100644 (file)
@@ -13,6 +13,8 @@
 #include <iostream>
 
 #include <plp/log.h>
+
+#include "W1Util.hh"
 #include "W1Scanner.hh"
 #include "W1TemperatureSensor.hh"
 #include "W1CounterDevice.hh"
 using namespace w1;
 using namespace std;
 
-W1Scanner::W1Scanner() {
-       log_debug("created\n");
-}
-
-W1Scanner::~W1Scanner() {
-       log_debug("destroyed\n");
-}
-
-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&))
 {
@@ -46,35 +31,45 @@ bool string_to_number(T& result,
        return !(iss >> format >> result).fail();
 }
 
+W1Scanner::W1Scanner() {
+       log_debug("W1Scanner created\n");
+}
+
+W1Scanner::~W1Scanner() {
+}
+
 W1Device *W1Scanner::create_device(dirent *direntry) {
        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("-");
+       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);
+                                       log_debug("temperature sensor: %d\n", ret_val->get_family_code());
                                        break;
                                case    0x1d:
-                                       cout << "counter device: " << family_code << endl;
+                                       log_debug("counter device: %d\n", family_code);
                                        ret_val = new W1CounterDevice(direntry, family_code, device_name);
                                        break;
+                               default:
+                                       log_debug("device not created the device, unsupported device type: %d\n", family_code);
+                                       break;
                        }
                }
        }
@@ -87,17 +82,24 @@ list<W1Device *> W1Scanner::get_device_list() {
        struct dirent           *direntry;
        W1Device                *device;
        list<W1Device *>        ret_val;
+       bool                    is_subdir;
 
+       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);
                }