X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=fade.c;h=8dfbcc2f767f251649cddca00084d1a080b0adae;hp=1f66b363e0dc836f629ace5170c661ad2b9e364e;hb=b8bc24e242b088195249574bb90cda2e1ee1d9e4;hpb=2ed89c59f0efcd0a2763f47c7d3455663241e623 diff --git a/fade.c b/fade.c index 1f66b363..8dfbcc2f 100644 --- a/fade.c +++ b/fade.c @@ -20,7 +20,9 @@ #include "fade.cmdline.h" #include "para.h" +#include "fd.h" +#include #include #include #include /* EXIT_SUCCESS */ @@ -32,9 +34,9 @@ #include "string.h" -struct gengetopt_args_info args_info; +struct fade_args_info args_info; -void para_log(__unused int ll, char *fmt,...) +void para_log(__a_unused int ll, const char *fmt,...) { va_list argp; time_t t1; @@ -53,11 +55,11 @@ void para_log(__unused int ll, char *fmt,...) */ static int open_mixer(void) { - int mixer_fd; + int mixer_fd; - if ((mixer_fd = open(args_info.mixer_device_arg, O_RDWR, 0)) < 0) - return -1; - return mixer_fd; + if ((mixer_fd = open(args_info.mixer_device_arg, O_RDWR, 0)) < 0) + return -1; + return mixer_fd; } /* @@ -167,10 +169,10 @@ out: return 1; } -static int client_cmd(char *cmd,...) +static int client_cmd(const char *cmd,...) { int ret, fds[3] = {0, 0, 0}; - pid_t pid; + pid_t pid; char *cmdline = make_message(BINDIR "/para_client %s", cmd); PARA_INFO_LOG("%s", cmdline); ret = para_exec_cmdline_pid(&pid, cmdline, fds); @@ -186,7 +188,6 @@ static void sweet_dreams(void) time_t t1, wake_time_epoch; unsigned int delay; struct tm *tm; - int hour = args_info.wake_hour_arg; int min = args_info.wake_min_arg; char *fa_stream = args_info.fa_stream_arg; char *wake_stream = args_info.wake_stream_arg; @@ -199,6 +200,25 @@ static void sweet_dreams(void) char *cmd, *sleep_stream = args_info.sleep_stream_given? args_info.sleep_stream_arg : NULL; + /* calculate wake time */ + time(&t1); + if (args_info.wake_hour_given) { + int hour = args_info.wake_hour_arg; + tm = localtime(&t1); + if (tm->tm_hour > hour || (tm->tm_hour == hour && tm->tm_min> min)) { + t1 += 86400; /* wake time is tomorrow */ + tm = localtime(&t1); + } + tm->tm_hour = hour; + tm->tm_min = min; + tm->tm_sec = 0; + } else { + t1 += 8 * 60 * 60; + PARA_INFO_LOG("default wake time: %lu\n", t1); + tm = localtime(&t1); + } + wake_time_epoch = mktime(tm); + PARA_INFO_LOG("waketime: %s", asctime(tm)); if (sf) { PARA_INFO_LOG("initial volume: %d\n", iv); set_vol(iv); @@ -215,27 +235,15 @@ static void sweet_dreams(void) client_cmd("stop"); if (!wf) return; - /* calculate wake time */ - time(&t1); - tm = localtime(&t1); - if (tm->tm_hour > hour || (tm->tm_hour == hour && tm->tm_min> min)) { - /* wake time is tomorrow */ - t1 += 86400; - tm = localtime(&t1); - t1 -= 86400; - } - tm->tm_hour = hour; - tm->tm_min = min; - tm->tm_sec = 0; - wake_time_epoch = mktime(tm); - PARA_INFO_LOG("waketime: %s", asctime(tm)); - while (wake_time_epoch > t1 + wf) { + for (;;) { + time(&t1); + if (wake_time_epoch <= t1 + wf) + break; delay = wake_time_epoch - t1 - wf; PARA_INFO_LOG("sleeping %u seconds (%u:%02u)\n", delay, delay / 3600, (delay % 3600) / 60); sleep(delay); - time(&t1); } cmd = make_message("csp %s\n", wake_stream); client_cmd(cmd); @@ -277,7 +285,7 @@ int main(int argc, char *argv[]) { int ret; - if (cmdline_parser(argc, argv, &args_info)) + if (fade_cmdline_parser(argc, argv, &args_info)) exit(EXIT_FAILURE); ret = configfile_exists(); if (!ret && args_info.config_file_given) { @@ -286,7 +294,7 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } if (ret) - cmdline_parser_configfile(args_info.config_file_arg, + fade_cmdline_parser_configfile(args_info.config_file_arg, &args_info, 0, 0, 0); if ((ret = open_mixer()) < 0) { PARA_EMERG_LOG("can not open mixer device %s.",