From 461c432e67075511112ade9a6adf19b6fea7a6e0 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 15 Nov 2011 09:58:15 -0600 Subject: Simplify some of the zone sleep code Signed-off-by: Dan McGee --- command.c | 9 ++++----- onkyo.c | 44 +++++++++++++++++++++----------------------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/command.c b/command.c index bd82551..fe926f2 100644 --- a/command.c +++ b/command.c @@ -471,15 +471,14 @@ static int handle_fakesleep(struct receiver *rcvr, return(-1); if(!arg || strcmp(arg, "status") == 0) { - struct timeval when = { 0, 0 }; + time_t when = 0; if(zone == '2') - when = rcvr->zone2_sleep; + when = rcvr->zone2_sleep.tv_sec; else if(zone == '3') - when = rcvr->zone3_sleep; + when = rcvr->zone3_sleep.tv_sec; - mins = when.tv_sec > now.tv_sec ? - (when.tv_sec - now.tv_sec + 59) / 60 : 0; + mins = when > now.tv_sec ? (when - now.tv_sec + 59) / 60 : 0; } else if(strcmp(arg, "off") == 0) { /* clear out any future receiver set sleep time */ if(zone == '2') { diff --git a/onkyo.c b/onkyo.c index 498165d..5589533 100644 --- a/onkyo.c +++ b/onkyo.c @@ -921,6 +921,8 @@ int main(int argc, char *argv[]) /* add our receiver list */ r = receivers; while(r) { + struct timeval diff; + if(r->fd < 0) { r = r->next; continue; @@ -929,39 +931,35 @@ int main(int argc, char *argv[]) maxfd = r->fd > maxfd ? r->fd : maxfd; /* do we need to queue a power off command for sleep? */ - if(r->zone2_sleep.tv_sec || r->zone3_sleep.tv_sec) { - struct timeval diff; - if(r->zone2_sleep.tv_sec) { - diff_timeval(&r->zone2_sleep, &now, &diff); - if(diff.tv_sec >= 0 && diff.tv_usec > 0) { - timeoutval = min_timeval(&timeoutval, &diff); - } else { - process_command(r, "zone2power off"); - r->zone2_sleep.tv_sec = 0; - r->zone2_sleep.tv_usec = 0; - } + if(r->zone2_sleep.tv_sec) { + diff_timeval(&r->zone2_sleep, &now, &diff); + if(diff.tv_sec >= 0 && diff.tv_usec > 0) { + timeoutval = min_timeval(&timeoutval, &diff); + } else { + process_command(r, "zone2power off"); + r->zone2_sleep.tv_sec = 0; + r->zone2_sleep.tv_usec = 0; } - if(r->zone3_sleep.tv_sec) { - diff_timeval(&r->zone3_sleep, &now, &diff); - if(diff.tv_sec >= 0 && diff.tv_usec > 0) { - timeoutval = min_timeval(&timeoutval, &diff); - } else { - process_command(r, "zone3power off"); - r->zone3_sleep.tv_sec = 0; - r->zone3_sleep.tv_usec = 0; - } + } + if(r->zone3_sleep.tv_sec) { + diff_timeval(&r->zone3_sleep, &now, &diff); + if(diff.tv_sec >= 0 && diff.tv_usec > 0) { + timeoutval = min_timeval(&timeoutval, &diff); + } else { + process_command(r, "zone3power off"); + r->zone3_sleep.tv_sec = 0; + r->zone3_sleep.tv_usec = 0; } } /* check for write possibility if we have commands in queue */ if(r->queue) { - struct timeval tv; - if(can_send_command(&(r->last_cmd), &now, &tv)) { + if(can_send_command(&(r->last_cmd), &now, &diff)) { FD_SET(r->fd, &writefds); } else { /* We want the smallest timeout, so replace the * existing if new is smaller. */ - timeoutval = min_timeval(&timeoutval, &tv); + timeoutval = min_timeval(&timeoutval, &diff); } } -- cgit v1.2.3-55-g3dc8