]> pilppa.org Git - nws-w1.git/blob - src_server/NetworkServiceServer_W1.cc
af68ad36028f0dc3a89b65532364c986a884f6f8
[nws-w1.git] / src_server / NetworkServiceServer_W1.cc
1 #include <iostream>
2 #include <list>
3
4 #include <string.h>
5 #include <errno.h>
6
7 #include <plp/log.h>
8 #include <plp/bus/BusServer.hh>
9
10 #include <w1/Factory.hh>
11
12 #include <plp/devicebus/DeviceBusMessageId.hh>
13 #include <plp/devicebus/server/ServerListenerImpl.hh>
14 #include <plp/devicebus/server/DeviceManagerServer.hh>
15
16 using namespace std;
17 using namespace plp;
18 using namespace plpbus;
19 using namespace plpdevicebus;
20 using namespace w1;
21
22 #define DEFAULT_READ_INTERVAL_SECONDS   600
23
24 bool try_parse_long(const char *str, long *result) {
25         int     new_result;
26         char    *endptr;
27         bool    ret_val;
28
29         ret_val         = false;
30         errno           = 0;
31         new_result      = strtol(str, &endptr, 10);
32         if (errno != 0) {
33                 log_error("invalid input %s, could not convert to integer.\n", str);
34         }
35         else {
36                 if (endptr == str) {
37                         log_error("invalid input %s, could not convert to integer.\n", str);
38                 }
39                 else {
40                         *result = new_result;
41                         ret_val = true;
42                 }
43         }
44         return ret_val;
45 }
46
47 int main(int argc, char** argv)
48 {
49         BusServer               *server;
50         ServerListenerImpl      *listener;
51         DeviceManagerServer     *dev_man;
52         string                  save_loc;
53         long                    read_interval_sec;
54         string                  server_name;
55         list<Device *>  dev_lst;
56
57         server_name     = W1_SERVER_NAME;
58         save_loc        = "/tmp/w1data";
59         read_interval_sec       = DEFAULT_READ_INTERVAL_SECONDS;
60         if (argc > 1) {
61                 save_loc        = argv[1];
62                 log_info("storage location: %s\n", save_loc.c_str());
63         }
64         else {
65                 log_info("no parameter given using default values:\n");
66                 log_info("\tnws-w1 %s %ld\n\n", save_loc.c_str(), read_interval_sec);
67                 log_info("usage:\n\tnws-w1 <result_save_path> <read_interval_seconds>\n");
68         }
69         if (argc > 2) {
70                 try_parse_long(argv[2], &read_interval_sec);
71         }
72         log_info("device polling interval: %ld seconds\n", read_interval_sec);
73         DeviceConfig::set_base_dir_name(save_loc);
74         DeviceConfig::set_read_interval_seconds(read_interval_sec);
75         log_info("starting server: %s\n", server_name.c_str());
76         dev_lst         = Factory::get_device_list();
77         server          = new BusServer();
78         dev_man         = new DeviceManagerServer(dev_lst);
79         server->init();
80         listener        = new ServerListenerImpl(dev_man);
81         server->add_server_listener(listener);
82         server->launch(server_name.c_str());
83         return 0;
84 }