summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dpmcgee@gmail.com>2011-11-14 15:02:48 -0600
committerDan McGee <dpmcgee@gmail.com>2011-11-14 15:02:48 -0600
commit5df32e5af7ab4520c7ed24484ad8024880f232e7 (patch)
treeb67653f7478773a403fbd2c23df7cb71faebba6b
parent22946032e36a2d54f61136642e02f9968ce082b5 (diff)
downloadonkyocontrol-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.c3
-rw-r--r--onkyo.h2
-rw-r--r--receiver.c26
3 files changed, 18 insertions, 13 deletions
diff --git a/onkyo.c b/onkyo.c
index 79de789..3a1c809 100644
--- a/onkyo.c
+++ b/onkyo.c
@@ -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;
}
diff --git a/onkyo.h b/onkyo.h
index e42a055..718ee5b 100644
--- a/onkyo.h
+++ b/onkyo.h
@@ -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);
diff --git a/receiver.c b/receiver.c
index e77674b..01c9869 100644
--- a/receiver.c
+++ b/receiver.c
@@ -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);
}
/**