3 #include <configuration.h>
15 std::list<Event> calculate_occurances(std::list<Event> alarms)
17 std::list<Event> future_alarms;
18 std::list<Event>::iterator alarm;
20 for (alarm = alarms.begin(); alarm != alarms.end(); alarm++)
24 next_time = alarm->next_occurance(Now());
26 std::cout << "Next alarm after will be " << next_time << ".\n";
27 if ( next_time != UTC(date(0,0,0), hour(0)))
29 future_alarms.push_back(*alarm);
36 // Reload the configuration and list of events.
40 Config.read("wakeup");
43 // Signal handler for SIGHUP: reload the configuration,
44 // event list and recalculate the next event.
46 void sighup_handler(int sig)
48 std::cout << "Caught signal " << sig << "\n";
58 signal(SIGHUP, sighup_handler);
60 logdir = Config.find_parameter("logging", "destination");
63 logdir = "."; // default to current dir
65 Log.open(logdir + "/wakeup.log");
67 std::ofstream runfile("wakeup.run");
68 runfile << Timebase.name() << "\n";
71 Log << "wakeup started";
73 std::list<Event> set_alarms;
74 std::list<Event> pending_alarms;
76 alarms_file = Config.find_parameter("alarms", "filename");
77 set_alarms = read_alarms(alarms_file);
78 pending_alarms = calculate_occurances(set_alarms);
80 std::cout << alarms_to_XML(pending_alarms);
82 // Find the next alarm
85 std::list<Event>::iterator alarm;
87 alarm = pending_alarms.begin();
89 while (alarm != pending_alarms.end())
91 if (alarm->next_occurance(Now()) < next_alarm.next_occurance(Now()))
98 std::cout << "Sleep until " << next_alarm.next_occurance(Now()) << "\n";
99 Timebase.nanosleep(3000);
101 std::cout << "wakeup exitting.\n";
102 remove("wakeup.run");