]> pilppa.org Git - lib1wire.git/blob - src_test/test_w1_datalog_read.cc
f833af5caeda0346ad3600d893f3baee52b28c10
[lib1wire.git] / src_test / test_w1_datalog_read.cc
1 /*
2  * test_data_read.cc
3  *
4  *  Created on: Nov 15, 2010
5  *      Author: lamikr
6  */
7 #include <list>
8 #include <string>
9 #include <iostream>
10
11 #include <errno.h>
12 #include <stdlib.h>
13
14 #include <plp/log.h>
15 #include <plp/Date.hh>
16 #include <plp/DataReader.hh>
17 #include <plp/DeviceConfig.hh>
18 #include <plp/Device.hh>
19 #include <plp/SensorDevice.hh>
20
21 #include "Factory.hh"
22
23 using namespace std;
24 using namespace plp;
25 using namespace w1;
26
27 bool try_parse_long(const char *str, long *result) {
28         int     new_result;
29         char    *endptr;
30         bool    ret_val;
31
32         ret_val         = false;
33         errno           = 0;
34         new_result      = strtol(str, &endptr, 10);
35         if (errno != 0) {
36                 log_error("invalid input %s, could not convert to integer.\n", str);
37         }
38         else {
39                 if (endptr == str) {
40                         log_error("invalid input %s, could not convert to integer.\n", str);
41                 }
42                 else {
43                         *result = new_result;
44                         ret_val = true;
45                 }
46         }
47         return ret_val;
48 }
49
50 int main(int argc, char** argv) {
51         string                          loc;
52         Data                            *fdata;
53         Data                            *ldata;
54         const DataReader                *reader;
55         Device                          *dev;
56         SensorDevice                    *device;
57         DataRange                       *dr;
58         DataRange                       *dr2;
59         list<Device *>                  dev_lst;
60         list<Device *>::iterator        list_iter;
61
62         // default values than can be overwritten with parameters
63         loc     = DeviceConfig::get_base_dir_name();
64         if (argc > 1) {
65                 loc     = argv[1];
66                 log_info("storage location: %s\n", loc.c_str());
67                 DeviceConfig::set_base_dir_name(loc);
68         }
69         else {
70                 log_warning("No storage location parameter given, using default location: %s\n", loc.c_str());
71         }
72         dev_lst = Factory::get_device_list();
73         for(list_iter = dev_lst.begin(); list_iter != dev_lst.end(); list_iter++) {
74                 dev     = (Device *)*list_iter;
75                 if (dev != NULL) {
76                         device  = dynamic_cast<SensorDevice *>(dev);
77                         if (device != NULL) {
78                                 reader  = device->get_device_data();
79                                 if (reader != NULL) {
80                                         dr      = ((DataReader *)reader)->get_data_range();
81                                         if (dr != NULL) {
82                                                 fdata   = dr->get_first();
83                                                 if (fdata != NULL) {
84                                                         fdata->printout();
85                                                         ldata   = dr->get_last();
86                                                         if (ldata != NULL) {
87                                                                 ldata->printout();
88                                                                 plp::Date d1;
89                                                                 plp::Date d2;
90
91                                                                 d1      = fdata->get_date();
92                                                                 d2      = ldata->get_date();
93                                                                 dr2     = ((DataReader *)reader)->get_data(&d1, &d2);
94                                                                 if (dr2 != NULL) {
95                                                                         dr2->printout();
96                                                                         delete(dr2);
97                                                                 }
98                                                                 delete(ldata);
99                                                         }
100                                                         delete(fdata);
101                                                 }
102                                                 delete(dr);
103                                         }
104                                 }
105                         }
106                 }
107         }
108         while (dev_lst.empty() == false) {
109                 dev     = dev_lst.back();
110                 dev_lst.pop_back();
111                 delete(dev);
112         }
113         return 0;
114 }