summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dpmcgee@gmail.com>2009-05-03 16:38:08 -0500
committerDan McGee <dpmcgee@gmail.com>2009-05-03 16:38:08 -0500
commitddb33bd5ccf933dfc16a5c02cb8eb601c1ad4ff9 (patch)
tree735b6788c1a7136b51c261dadc3f05725df4e870
parent9554dc6c191693bcb37e1deb6771960cb758fb31 (diff)
downloadonkyocontrol-ddb33bd5ccf933dfc16a5c02cb8eb601c1ad4ff9.tar.gz
onkyocontrol-ddb33bd5ccf933dfc16a5c02cb8eb601c1ad4ff9.zip
Add preset commands
Signed-off-by: Dan McGee <dpmcgee@gmail.com>
-rw-r--r--command.c24
-rw-r--r--receiver.c20
2 files changed, 38 insertions, 6 deletions
diff --git a/command.c b/command.c
index bf165ba..eb47363 100644
--- a/command.c
+++ b/command.c
@@ -116,10 +116,11 @@ static int handle_boolean(const char *prefix, const char *arg)
return(-1);
}
-static int handle_volume(const char *prefix, const char *arg)
+static int handle_ranged(const char *prefix, const char *arg,
+ int lower, int upper)
{
int ret;
- long int level;
+ long level;
char *test;
char cmdstr[3]; /* "XX\0" */
@@ -133,7 +134,7 @@ static int handle_volume(const char *prefix, const char *arg)
/* parse error, not a number */
return(-1);
}
- if(level < 0 || level > 100) {
+ if(level < lower || level > upper) {
/* range error */
return(-1);
}
@@ -143,10 +144,20 @@ static int handle_volume(const char *prefix, const char *arg)
return cmd_attempt(prefix, cmdstr);
}
+static int handle_volume(const char *prefix, const char *arg)
+{
+ return handle_ranged(prefix, arg, 0, 100);
+}
+
+static int handle_preset(const char *prefix, const char *arg)
+{
+ return handle_ranged(prefix, arg, 0, 40);
+}
+
static int handle_swlevel(const char *prefix, const char *arg)
{
int ret;
- long int level;
+ long level;
char *test;
char cmdstr[3]; /* "XX\0" */
@@ -346,7 +357,7 @@ static int handle_tune(const char *prefix, const char *arg)
static int handle_sleep(const char *prefix, const char *arg)
{
- long int mins;
+ long mins;
char *test;
char cmdstr[3]; /* "XX\0" */
@@ -453,6 +464,7 @@ void init_commands(void)
add_command("input", "SLI", handle_input);
add_command("mode", "LMD", handle_mode);
add_command("tune", "TUN", handle_tune);
+ add_command("preset", "PRS", handle_preset);
add_command("swlevel", "SWL", handle_swlevel);
add_command("z2power", "ZPW", handle_boolean);
@@ -460,12 +472,14 @@ void init_commands(void)
add_command("z2mute", "ZMT", handle_boolean);
add_command("z2input", "SLZ", handle_input);
add_command("z2tune", "TUZ", handle_tune);
+ add_command("z2preset", "PRZ", handle_preset);
add_command("z3power", "PW3", handle_boolean);
add_command("z3volume", "VL3", handle_volume);
add_command("z3mute", "MT3", handle_boolean);
add_command("z3input", "SL3", handle_input);
add_command("z3tune", "TU3", handle_tune);
+ add_command("z3preset", "PR3", handle_preset);
add_command("sleep", "SLP", handle_sleep);
diff --git a/receiver.c b/receiver.c
index d2fe7d1..3809a1a 100644
--- a/receiver.c
+++ b/receiver.c
@@ -326,7 +326,7 @@ static char *parse_status(int size, char *status)
char *pos, *tunemsg;
/* read frequency in as a base 10 number */
long freq = strtol(sptr + 3, &pos, 10);
- /* decide whether we are main or zone 2 */
+ /* decide whether we are main or zones */
if(sptr[2] == 'N') {
tunemsg = "OK:tune:";
} else if(sptr[2] == 'Z') {
@@ -346,6 +346,24 @@ static char *parse_status(int size, char *status)
}
}
+ else if(strncmp(sptr, "PRS", 3) == 0 || strncmp(sptr, "PRZ", 3) == 0
+ || strncmp(sptr, "PR3", 3) == 0) {
+ /* parse the preset number out */
+ char *pos, *prsmsg;
+ /* read value in as a base 16 (hex) number */
+ long value = strtol(sptr + 3, &pos, 16);
+ /* decide whether we are main or zones */
+ if(sptr[2] == 'S') {
+ prsmsg = "OK:preset:";
+ } else if(sptr[2] == 'Z') {
+ prsmsg = "OK:zone2preset:";
+ } else if(sptr[2] == '3') {
+ prsmsg = "OK:zone3preset:";
+ }
+ ret = calloc(strlen(prsmsg) + 2 + 1, sizeof(char));
+ sprintf(ret, "%s%ld\n", prsmsg, value);
+ }
+
else if(strncmp(sptr, "SLP", 3) == 0) {
/* parse the minutes out */
char *pos;