4 * Created on: Oct 20, 2010
18 #include "W1Scanner.hh"
19 #include "W1TemperatureSensor.hh"
20 #include "W1CounterDevice.hh"
26 template <class NumberDataType>
27 bool string_to_number(NumberDataType& result,
28 const std::string& string_param,
29 std::ios_base& (*format)(std::ios_base&))
31 std::istringstream iss(string_param);
32 return !(iss >> format >> result).fail();
35 W1Scanner::W1Scanner() {
36 log_debug("W1Scanner created\n");
39 W1Scanner::~W1Scanner() {
42 W1Device *W1Scanner::create_device(dirent *direntry_param) {
52 folder_name = direntry_param->d_name;
53 pos = folder_name.find("-");
55 tmp_str = folder_name.substr(0, pos);
56 // number in string is in hex format, convert to int
57 suc_flg = string_to_number<int>(family_code, tmp_str, hex);
58 if (suc_flg == true) {
59 log_debug("family_code: %d\n", family_code);
60 device_name = folder_name.substr(pos + 1, folder_name.length() - pos);
61 ret_val = Factory::get_device(family_code,
69 list<W1Device *> W1Scanner::get_device_list() {
72 struct dirent *direntry;
74 list<W1Device *> ret_val;
77 printf("get_device_list() started\n");
78 dir = opendir(W1_SCAN_ROOTDIR);
80 direntry = readdir(dir);
81 while(direntry != NULL) {
82 is_subdir = W1Util::is_subdirectory(W1_SCAN_ROOTDIR, direntry);
83 if (is_subdir == true) {
84 log_info("dir_name: %s\n", direntry->d_name);
85 device = create_device(direntry);
87 log_info("device: %d\n", device->get_family_code());
88 ret_val.push_back(device);
91 log_info("unsupported device-directory: %s\n", direntry->d_name);
94 direntry = readdir(dir);
96 err_flg = closedir(dir);
98 log_error("failed to close 1-wire device directory scanned: %s\n", W1_SCAN_ROOTDIR);