]> pilppa.org Git - lib1wire.git/blob - src_test/test_w1_datalog_write.cc
include unistd required by sleep call
[lib1wire.git] / src_test / test_w1_datalog_write.cc
1 /*
2  * test_w1.cc
3  *
4  *  Created on: Oct 20, 2010
5  *      Author: lamikr
6  */
7 #include <list>
8 #include <string>
9 #include <iostream>
10
11 #include <errno.h>
12 #include <stdlib.h>
13 #include <unistd.h>
14
15 #include <plp/log.h>
16
17 #include <plp/DeviceConfig.hh>
18 #include <plp/Device.hh>
19
20 #include <plp/str_util.h>
21
22 #include "Factory.hh"
23
24 using namespace w1;
25 using namespace std;
26 using namespace plp;
27
28 #define DEFAULT_READ_INTERVAL_SECONDS   600
29 #define DEFAULT_MAX_READ_COUNT          -1
30
31 int main(int argc, char** argv) {
32         int                             read_count_total;
33         long                            cnt_max_scans;
34         long                            read_interval_seconds;
35         string                          loc;
36         Device                          *device;
37         list<Device *>                  device_list;
38         list<Device *>::iterator        iter;
39
40         // default values than can be overwritten with parameters
41         loc     = "/tmp/w1data";
42         read_interval_seconds   = DEFAULT_READ_INTERVAL_SECONDS;
43         cnt_max_scans           = DEFAULT_MAX_READ_COUNT;
44         if (argc > 1) {
45                 loc     = argv[1];
46         }
47         else {
48                 log_info("no parameter given using default values:\n");
49                 log_info("\ttest_w1_datalog_write %s %ld %ld\n\n", loc.c_str(), read_interval_seconds, cnt_max_scans);
50                 log_info("usage:\n\ttest_w1_datalog_write <result_save_path> <read_interval_seconds> <max_read_count>\n");
51                 log_info("\tmax_read_count == -1: read devices until application is terminated\n\n");
52         }
53         if (argc > 2) {
54                 parse_long(argv[2], &read_interval_seconds);
55         }
56         if (argc > 3) {
57                 parse_long(argv[3], &cnt_max_scans);
58         }
59         log_info("searching 1-wire devices\n");
60         if (read_interval_seconds == DEFAULT_READ_INTERVAL_SECONDS) {
61                 log_info("\tdevice read interval: %ld seconds (default value)\n", read_interval_seconds);
62         }
63         else {
64                 log_info("\tdevice read interval: %ld seconds\n", read_interval_seconds);
65         }
66         log_info("\tdata save dir: %s\n", loc.c_str());
67         if (cnt_max_scans == DEFAULT_MAX_READ_COUNT) {
68                 log_info("\tmax read count: %ld (default value, devices will be read until application is terminated)\n\n", cnt_max_scans);
69         }
70         else {
71                 log_info("\tmax read count: %ld\n\n", cnt_max_scans);
72         }
73         DeviceConfig::set_base_dir_name(loc);
74         device_list             = Factory::get_device_list();
75         read_count_total        = 0;
76         if (device_list.size() > 0) {
77                 while(1) {
78                         read_count_total++;
79                         if ((cnt_max_scans != -1) &&
80                             (read_count_total > cnt_max_scans)) {
81                                 log_info("closing the application, max read count reached. (%ld)\n", cnt_max_scans);
82                                 break;
83                         }
84                         for (iter = device_list.begin(); iter != device_list.end(); iter++) {
85                                 device = (Device *)*iter;
86                                 if (device->get_lifecycle_state() == LIFECYCLE_STATUS__AVAILABLE) {
87                                         device->printout();
88                                         sleep(1);
89                                 }
90                                 else {
91                                         log_debug("device not available, %s.\n", device->get_id().c_str());
92                                 }
93                         }
94                         sleep(read_interval_seconds);
95                 }
96         }
97         else {
98                 log_debug("could not find devices.\n");
99         }
100         log_debug("trying to empty device list\n");
101         while (device_list.empty() == false) {
102                 device  = device_list.back();
103                 device_list.pop_back();
104                 log_debug("calling delete\n");
105                 delete(device);
106         }
107         return 0;
108 }