#include <string>
#include <iostream>
+#include <errno.h>
+#include <stdlib.h>
+
#include <plp/log.h>
#include "W1Store.hh"
using namespace w1;
using namespace std;
+bool try_parse_long(const char *str, long *result) {
+ int new_result;
+ char *endptr;
+ bool ret_val;
+
+ ret_val = false;
+ errno = 0;
+ new_result = strtol(str, &endptr, 10);
+ if (errno != 0) {
+ log_error("invalid input %s, could not convert to integer.\n", str);
+ }
+ else {
+ if (endptr == str) {
+ log_error("invalid input %s, could not convert to integer.\n", str);
+ }
+ else {
+ *result = new_result;
+ ret_val = true;
+ }
+ }
+ return ret_val;
+}
+
int main(int argc, char** argv) {
W1Scanner *scanner;
list<W1Device *> device_list;
int round;
- int interval_seconds;
- int store_interval;
+ long scan_interval;
+ long store_interval;
string location;
+ bool err_flg;
+ // default values than can be overwritten with parameters
location = "/tmp/";
+ scan_interval = 600;
+ store_interval = 6;
if (argc > 1) {
location = argv[1];
log_info("storage location: %s\n", location.c_str());
else {
log_warning("storage location was not given as a parameter, using default location: %s\n", location.c_str());
}
+ if (argc > 2) {
+ try_parse_long(argv[2], &scan_interval);
+ }
+ if (argc > 3) {
+ try_parse_long(argv[3], &store_interval);
+ }
+ log_info("start scanning, data saved to location: %s, scan interval: %d, store interval: %d\n", location.c_str(), scan_interval, store_interval);
W1Store::set_location(location.c_str());
- interval_seconds = 600;
- store_interval = 6;
scanner = new W1Scanner();
device_list = scanner->get_device_list();
round = 0;
if (device_list.size() > 0) {
while(1) {
round++;
- for(list<W1Device *>::iterator list_iter = device_list.begin(); list_iter != device_list.end(); list_iter++)
- {
+ for(list<W1Device *>::iterator list_iter = device_list.begin(); list_iter != device_list.end(); list_iter++) {
W1Device *device = (W1Device *)*list_iter;
device->printout();
device->store();
}
}
- sleep(interval_seconds);
+ sleep(scan_interval);
if (round >= store_interval) {
round = 0;
}