X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FW1Scanner.cc;h=390c2510576f4267747b6ef5064d76a1b4bd93ae;hb=64f4c95cf6d3a772bfc721081dc39e2105c2756c;hp=a27b23d5d41430c749f26e23b0521bd70f858a01;hpb=87afaf6ff028091d7de11f577bc1f24f1bd0d3e3;p=lib1wire.git diff --git a/src/W1Scanner.cc b/src/W1Scanner.cc index a27b23d..390c251 100644 --- a/src/W1Scanner.cc +++ b/src/W1Scanner.cc @@ -13,6 +13,8 @@ #include #include + +#include "W1Util.hh" #include "W1Scanner.hh" #include "W1TemperatureSensor.hh" #include "W1CounterDevice.hh" @@ -20,25 +22,8 @@ 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 -bool string_to_number(T& result, +template +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(family_code, temp_str, hex); - if (sucFlg == true) { - cout << "family_code: " << family_code << endl; + suc_flg = string_to_number(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 W1Scanner::get_device_list() { struct dirent *direntry; W1Device *device; list 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); }