X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=fade.c;h=8ee192cd177bd65e4f886cd39c29ab9498cb69a2;hp=1bfa0ba1ee8e9ca862de62fef4104d6c3e9cd4a4;hb=f78b535b0d7863152b7ca463b2b499485f4ea1a7;hpb=46af7dd81149caee0409535d5d9884ed9fa5af0e diff --git a/fade.c b/fade.c index 1bfa0ba1..8ee192cd 100644 --- a/fade.c +++ b/fade.c @@ -23,13 +23,17 @@ enum mixer_id {MIXER_ENUM}; static char *mixer_name[] = {MIXER_NAMES}; DECLARE_MIXER_INITS; static struct mixer supported_mixer[] = {MIXER_ARRAY}; +#define FOR_EACH_MIXER(i) for ((i) = 0; (i) < NUM_SUPPORTED_MIXERS; (i)++) -__printf_2_3 void date_log(__a_unused int ll, const char *fmt, ...) +static int loglevel; +__printf_2_3 void date_log(int ll, const char *fmt, ...) { va_list argp; time_t t1; struct tm *tm; + if (ll < loglevel) + return; time(&t1); tm = localtime(&t1); printf("%d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); @@ -48,7 +52,7 @@ static int fade(struct mixer *m, struct mixer_handle *h, int new_vol, int fade_t unsigned long long tmp, tmp2; /* Careful with that axe, Eugene! */ if (fade_time <= 0) - return 1; + return m->set(h, new_vol); secs = fade_time; PARA_NOTICE_LOG("fading to %d in %d seconds\n", new_vol, secs); ret = m->get(h); @@ -85,7 +89,7 @@ static void client_cmd(const char *cmd) pid_t pid; char *cmdline = make_message(BINDIR "/para_client %s", cmd); - PARA_INFO_LOG("%s\n", cmdline); + PARA_NOTICE_LOG("%s\n", cmdline); ret = para_exec_cmdline_pid(&pid, cmdline, fds); free(cmdline); if (ret < 0) { @@ -233,7 +237,7 @@ static void init_mixers(void) { int i; - for (i = 0; i < NUM_SUPPORTED_MIXERS; i++) { + FOR_EACH_MIXER(i) { struct mixer *m = &supported_mixer[i]; PARA_DEBUG_LOG("initializing mixer API #%d (%s)\n", i, mixer_name[i]); @@ -259,6 +263,29 @@ static int set_channel(struct mixer *m, struct mixer_handle *h) return ret; } +static struct mixer *get_mixer_or_die(void) +{ + int i; + + if (!conf.mixer_api_given) + i = DEFAULT_MIXER; + else + FOR_EACH_MIXER(i) + if (!strcmp(mixer_name[i], conf.mixer_api_arg)) + break; + if (i < NUM_SUPPORTED_MIXERS) { + PARA_NOTICE_LOG("using %s mixer API\n", mixer_name[i]); + return supported_mixer + i; + } + printf("available mixer APIs: "); + FOR_EACH_MIXER(i) { + int d = (i == DEFAULT_MIXER); + printf("%s%s%s ", d? "[" : "", mixer_name[i], d? "]" : ""); + } + printf("\n"); + exit(EXIT_FAILURE); +} + int main(int argc, char *argv[]) { int ret; @@ -285,9 +312,9 @@ int main(int argc, char *argv[]) fade_cmdline_parser_config_file(conf.config_file_arg, &conf, ¶ms); } + loglevel = get_loglevel_by_name(conf.loglevel_arg); init_mixers(); - m = &supported_mixer[DEFAULT_MIXER]; - PARA_INFO_LOG("using %s mixer\n", mixer_name[DEFAULT_MIXER]); + m = get_mixer_or_die(); ret = m->open(conf.mixer_device_arg, &h); if (ret < 0) goto out;