#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&))
{
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;
}
}
}
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);
}