4 * Created on: Oct 20, 2010
16 #include "W1Scanner.hh"
17 #include "W1TemperatureSensor.hh"
18 #include "W1CounterDevice.hh"
23 W1Scanner::W1Scanner() {
24 log_debug("created\n");
27 W1Scanner::~W1Scanner() {
28 log_debug("destroyed\n");
31 bool W1Scanner::is_subdirectory(dirent *direntry) {
33 if (strcmp(direntry->d_name, ".") == 0 ||
34 (strcmp(direntry->d_name, "..") == 0)) {
41 bool string_to_number(T& result,
42 const std::string& string_param,
43 std::ios_base& (*format)(std::ios_base&))
45 std::istringstream iss(string_param);
46 return !(iss >> format >> result).fail();
49 W1Device *W1Scanner::create_device(dirent *direntry) {
59 folder_name = direntry->d_name;
60 pos = folder_name.find("-");
62 temp_str = folder_name.substr(0, pos);
63 // number in string is in hex format, convert to int
64 sucFlg = string_to_number<int>(family_code, temp_str, hex);
66 cout << "family_code: " << family_code << endl;
67 device_name = folder_name.substr(pos + 1, folder_name.length() - pos);
71 cout << "temperature sensor: " << family_code << endl;
72 ret_val = new W1TemperatureSensor(direntry, family_code, device_name);
75 cout << "counter device: " << family_code << endl;
76 ret_val = new W1CounterDevice(direntry, family_code, device_name);
84 list<W1Device *> W1Scanner::get_device_list() {
87 struct dirent *direntry;
89 list<W1Device *> ret_val;
91 dir = opendir(W1_SCAN_ROOTDIR);
93 direntry = readdir(dir);
94 while(direntry != NULL) {
95 if (is_subdirectory(direntry) == true) {
96 log_debug("dir_name: %s\n", direntry->d_name);
97 device = create_device(direntry);
99 ret_val.push_back(device);
102 direntry = readdir(dir);
104 err_flg = closedir(dir);
106 log_error("failed to close 1-wire device directory scanned: %s\n", W1_SCAN_ROOTDIR);