#include #include #include #include #include #include #include #include #include #include using namespace std; using namespace plp; using namespace plpbus; using namespace plpdevicebus; using namespace w1; #define DEFAULT_READ_INTERVAL_SECONDS 600 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) { BusServer *server; ServerListenerImpl *listener; DeviceManagerServer *dev_man; string save_loc; long read_interval_sec; string server_name; list dev_lst; server_name = W1_SERVER_NAME; save_loc = "/tmp/w1data"; read_interval_sec = DEFAULT_READ_INTERVAL_SECONDS; if (argc > 1) { save_loc = argv[1]; log_info("storage location: %s\n", save_loc.c_str()); } else { log_info("no parameter given using default values:\n"); log_info("\tnws-w1 %s %ld\n\n", save_loc.c_str(), read_interval_sec); log_info("usage:\n\tnws-w1 \n"); } if (argc > 2) { try_parse_long(argv[2], &read_interval_sec); } log_info("device polling interval: %ld seconds\n", read_interval_sec); DeviceConfig::set_base_dir_name(save_loc); DeviceConfig::set_read_interval_seconds(read_interval_sec); log_info("starting server: %s\n", server_name.c_str()); dev_lst = Factory::get_device_list(); server = new BusServer(); dev_man = new DeviceManagerServer(dev_lst); server->init(); listener = new ServerListenerImpl(dev_man); server->add_server_listener(listener); server->launch(server_name.c_str()); return 0; }