summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2012-09-29 14:20:56 +0000
committerweasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede>2012-09-29 14:20:56 +0000
commit0516c2d9798c49b78d9c270641496238d55b886a (patch)
tree9b230ab4c9cfa9a8f3a0762dc0b15c51e8f4e921
parentdc28cdcd211c6f7923829ff3b76b28d9d740b77d (diff)
Add stereo
git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@552 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
-rwxr-xr-xstereo157
1 files changed, 157 insertions, 0 deletions
diff --git a/stereo b/stereo
new file mode 100755
index 0000000..226336b
--- /dev/null
+++ b/stereo
@@ -0,0 +1,157 @@
+#!/bin/sh
+
+# stereo
+#
+# wrapper script to control my Denon stereo with IR
+
+# Copyright (c) 2012 Peter Palfrader
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+
+set -e
+
+STATEFILE=/var/run/stereo-state
+TIMEOUT=30
+DEBUG=0
+
+if [ "$#" -lt 1 ]; then
+ echo 2>&1 "Usage: $0 <command>"
+ exit 1
+fi
+
+
+if grep -q ON "$STATEFILE"; then
+ power=1
+else
+ power=0
+fi
+
+send() {
+ irsend set_transmitters 1
+ irsend send_once denon "$1"
+}
+toggle_power() {
+ send KEY_POWER
+}
+force_status_update_off() {
+ cat /dev/null > "$STATEFILE"
+}
+off() {
+ if [ "$power" -gt 0 ]; then
+ toggle_power
+ force_status_update_off
+ else
+ echo "Already off"
+ fi
+}
+on() {
+ if [ "$power" -lt 1 ]; then
+ toggle_power
+ echo ON > "$STATEFILE"
+ else
+ echo "Already on"
+ fi
+}
+
+used() {
+ if grep -q RUNNING /proc/asound/card*/*p/*/status; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+tch() {
+ touch "$STATEFILE"
+}
+
+case "$1" in
+ init)
+ cat /dev/null > /var/run/stereo-state
+ chgrp plugdev /var/run/stereo-state
+ chmod 664 /var/run/stereo-state
+ ;;
+ mute)
+ send KEY_MUTE
+ ;;
+ vol+)
+ send KEY_VOLUMEUP
+ ;;
+ vol-)
+ send KEY_VOLUMEDOWN
+ ;;
+ off)
+ off
+ ;;
+ on)
+ on
+ ;;
+ toggle)
+ if [ "$power" -gt 0 ]; then
+ off
+ else
+ on
+ fi
+ ;;
+ status)
+ if [ "$power" -gt 0 ]; then
+ echo "on; last used: $(stat -c%y "$STATEFILE")"
+ else
+ echo off
+ fi
+ ;;
+ used)
+ if used; then
+ exit 0
+ else
+ exit 1
+ fi
+ ;;
+ touch)
+ tch
+ ;;
+ # runs out of cron every 5 minutes or so
+ # */5 * * * * bin/stereo off-if-idle
+ off-if-idle)
+ if [ "$power" -gt 0 ]; then
+ if used; then
+ tch
+ [ $DEBUG -lt 1 ] || echo "in use"
+ else
+ if find "$STATEFILE" -mmin -"$TIMEOUT" | grep -q .; then
+ [ $DEBUG -lt 1 ] || echo "recently used"
+ else
+ off
+ fi
+ fi
+ else
+ [ $DEBUG -lt 1 ] || echo "is off"
+ fi
+ ;;
+ force-status-off)
+ force_status_update_off
+ ;;
+ *)
+ echo >&2 "Unknown command $1"
+ exit 1
+esac