diff options
author | Dan McGee <dpmcgee@gmail.com> | 2011-11-14 15:02:48 -0600 |
---|---|---|
committer | Dan McGee <dpmcgee@gmail.com> | 2011-11-14 15:02:48 -0600 |
commit | 5df32e5af7ab4520c7ed24484ad8024880f232e7 (patch) | |
tree | b67653f7478773a403fbd2c23df7cb71faebba6b | |
parent | 22946032e36a2d54f61136642e02f9968ce082b5 (diff) | |
download | onkyocontrol-5df32e5af7ab4520c7ed24484ad8024880f232e7.tar.gz onkyocontrol-5df32e5af7ab4520c7ed24484ad8024880f232e7.zip |
Clear zone sleep timer state when power is switched off
This prevents a long-running timer from acting if the receiver is power
cycled, which should clear the timer.
Signed-off-by: Dan McGee <dpmcgee@gmail.com>
-rw-r--r-- | onkyo.c | 3 | ||||
-rw-r--r-- | onkyo.h | 2 | ||||
-rw-r--r-- | receiver.c | 26 |
3 files changed, 18 insertions, 13 deletions
@@ -291,6 +291,7 @@ static void show_status(void) printf("%d ", c->fd); c = c->next; } + printf("\n"); } /** @@ -724,7 +725,7 @@ int write_to_connections(struct receiver *r, const char *msg) c = c->next; } /* check for power messages- update our power state variable */ - r->power = update_power_status(r->power, msg); + update_power_status(r, msg); return 0; } @@ -75,7 +75,7 @@ void free_statuses(void); int rcvr_send_command(struct receiver *rcvr); char *process_incoming_message(int serialfd, int logfd); enum power initial_power_status(void); -enum power update_power_status(enum power pwr, const char *msg); +void update_power_status(struct receiver *rcvr, const char *msg); /* command.c - user command processing */ void init_commands(void); @@ -498,7 +498,8 @@ static char *parse_status(int size, char *status) * Return the bitmask value for the initial unknown power status. * @return the initial power status bitmask value */ -enum power initial_power_status(void) { +enum power initial_power_status(void) +{ return(POWER_OFF); } @@ -507,26 +508,29 @@ enum power initial_power_status(void) { * message may or may not be related to power; if it is not then the status * will not be updated. If it is, perform some bitmask-foo to update the power * status depending on what zone was turned on or off. - * @param pwr the current power status bitmask value + * @param rcvr the receiver the message was received from * @param msg the message to process - * @return the new power status bitmask value */ -enum power update_power_status(enum power pwr, const char *msg) { +void update_power_status(struct receiver *rcvr, const char *msg) +{ /* var is a bitmask, manage power/zone2power separately */ if(strcmp(msg, "OK:power:off\n") == 0) { - pwr &= ~MAIN_POWER; + rcvr->power &= ~MAIN_POWER; } else if(strcmp(msg, "OK:power:on\n") == 0) { - pwr |= MAIN_POWER; + rcvr->power |= MAIN_POWER; } else if(strcmp(msg, "OK:zone2power:off\n") == 0) { - pwr &= ~ZONE2_POWER; + rcvr->power &= ~ZONE2_POWER; + rcvr->zone2_sleep.tv_sec = 0; + rcvr->zone2_sleep.tv_usec = 0; } else if(strcmp(msg, "OK:zone2power:on\n") == 0) { - pwr |= ZONE2_POWER; + rcvr->power |= ZONE2_POWER; } else if(strcmp(msg, "OK:zone3power:off\n") == 0) { - pwr &= ~ZONE3_POWER; + rcvr->power &= ~ZONE3_POWER; + rcvr->zone3_sleep.tv_sec = 0; + rcvr->zone3_sleep.tv_usec = 0; } else if(strcmp(msg, "OK:zone3power:on\n") == 0) { - pwr |= ZONE3_POWER; + rcvr->power |= ZONE3_POWER; } - return(pwr); } /** |