4 * Created on: Oct 20, 2010
16 #include "DeviceConfig.hh"
22 #define DEFAULT_READ_INTERVAL_SECONDS 600
23 #define DEFAULT_SAVE_INTERVAL_COUNT 5
24 #define DEFAULT_MAX_READ_COUNT -1
26 bool try_parse_long(const char *str, long *result) {
33 new_result = strtol(str, &endptr, 10);
35 log_error("invalid input %s, could not convert to integer.\n", str);
39 log_error("invalid input %s, could not convert to integer.\n", str);
49 int main(int argc, char** argv) {
50 list<W1Device *> device_list;
51 int read_count_afer_save;
54 long read_interval_seconds;
55 long save_interval_count;
58 list<W1Device *>::iterator iter;
60 // default values than can be overwritten with parameters
62 read_interval_seconds = DEFAULT_READ_INTERVAL_SECONDS;
63 save_interval_count = DEFAULT_SAVE_INTERVAL_COUNT;
64 cnt_max_scans = DEFAULT_MAX_READ_COUNT;
69 log_info("no parameter given using default values:\n");
70 log_info("\ttest_w1_datalog_write %s %ld %ld %ld\n\n", loc.c_str(), read_interval_seconds, save_interval_count, cnt_max_scans);
71 log_info("usage:\n\ttest_w1_datalog_write <result_save_path> <read_interval_seconds> <save_interval_count> <max_read_count>\n");
72 log_info("\tsave_interval_count == -1: do not save data that is read\n");
73 log_info("\tmax_read_count == -1: read devices until application is terminated\n\n");
76 try_parse_long(argv[2], &read_interval_seconds);
79 try_parse_long(argv[3], &save_interval_count);
82 try_parse_long(argv[4], &cnt_max_scans);
84 log_info("searching 1-wire devices\n");
85 if (read_interval_seconds == DEFAULT_READ_INTERVAL_SECONDS) {
86 log_info("\tdevice read interval: %ld seconds (default value)\n", read_interval_seconds);
89 log_info("\tdevice read interval: %ld seconds\n", read_interval_seconds);
91 if (save_interval_count != -1) {
92 if (save_interval_count == DEFAULT_SAVE_INTERVAL_COUNT) {
93 log_info("\tsave interval: %ld (default value)\n", save_interval_count);
96 log_info("\tsave interval: %ld\n", save_interval_count);
98 log_info("\tdata save dir: %s\n", loc.c_str());
101 log_info("\tresults are not saved\n");
103 if (cnt_max_scans == DEFAULT_MAX_READ_COUNT) {
104 log_info("\tmax read count: %ld (default value, devices will be read until application is terminated)\n\n", cnt_max_scans);
107 log_info("\tmax read count: %ld\n\n", cnt_max_scans);
109 DeviceConfig::set_base_dir_name(loc);
110 device_list = Factory::get_device_list();
111 read_count_afer_save = 0;
112 read_count_total = 0;
113 if (device_list.size() > 0) {
115 read_count_afer_save++;
117 if ((cnt_max_scans != -1) &&
118 (read_count_total > cnt_max_scans)) {
119 log_info("closing the application, max read count reached. (%ld)\n", cnt_max_scans);
122 for(iter = device_list.begin(); iter != device_list.end(); iter++) {
123 device = (W1Device *)*iter;
126 if ((save_interval_count != -1) &&
127 (read_count_afer_save >= save_interval_count)) {
131 sleep(read_interval_seconds);
132 if ((save_interval_count != -1) &&
133 (read_count_afer_save >= save_interval_count)) {
134 read_count_afer_save = 0;
139 log_debug("could not find 1-wire devices.\n");
141 while (device_list.empty() == false) {
142 device = device_list.back();
143 device_list.pop_back();